TouchImageView set drag and zoom bounds limits , prevent from going off screen
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int sH = displaymetrics.heightPixels;
int sW = displaymetrics.widthPixels;
float dx, dy, newX, newY;
switch (action) {
case MotionEvent.ACTION_DOWN:
dx = event.getRawX() - v.getX();
dy = event.getRawY() - v.getY();
break;
case MotionEvent.ACTION_MOVE:
newX = event.getRawX() - dx;
newY = event.getRawY() - dy;
if ((newX <= 0 || newX >= sW-v.getWidth()) || (newY <= 0 || newY >= sH-v.getHeight()))
break;
v.setX(newX);
v.setY(newY);
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return true;
}
How to keep an image inside the screen limits while using pinch zoom and drag gestures?
Why not grab the dimensions of the screen and check the MotionEvent coordinates are within these before updating your matrix?
Something like..
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenHight = displaymetrics.heightPixels;
int screenWidth = displaymetrics.widthPixels;
...
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
int newX = event.getX() - start.x;
int newY = event.getY() - start.y;
if ( (newX <= 0 || newX >= screenWidth) ||
(newY <= 0 || newY >= screenHeight) )
break;
matrix.set(savedMatrix);
matrix.postTranslate(newX, newY);
}
...
Related Topics
How to Fix: "You Need to Use a Theme.Appcompat Theme (Or Descendant) with This Activity"
Listview in Arrayadapter Order Get's Mixed Up When Scrolling
Android Keyboard Hides Edittext
Disabling Android O Auto-Fill Service for an Application
Get Listview Item Position on Button Click
Work Around Canvas.Clippath() That Is Not Supported in Android Any More
How to Store SQLite Database Directly on Sdcard
Android Exception: Did You Forget to Call 'Public Void Setup (Localactivitymanager Activitygroup)'
Error:Cause: Unable to Find Valid Certification Path to Requested Target
How to Resolve Java.Util.Zip.Zipexception
Listfragment Onlistitemclick Not Being Called
Customize Check Box Preference
Set Android Ip,Dns,Gateway Setting Programmatically
Dagger 2.10 Android Subcomponents and Builders
How to Resolve "Missing Pendingintent Mutability Flag" Lint Warning in Android API 30+
What Method Should I Use Now Since Firebaseinstanceid.Getinstance().Gettoken() Is Deprecated