public class DragTest extends Activity {
private ImageView dog;
private float xl;
private float yl;
private final int MODE_DRAG = 1;
private final int MODE_ZOOM = 2;
private final int MODE_NONE = 0;
private int currentMode = MODE_NONE;
private double distanceStart;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drag_test);
initView();
}
Matrix matrix = new Matrix();
Matrix matrixNew = new Matrix();
private void initView() {
dog = (ImageView) findViewById(R.id.dog);
dog.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
currentMode = MODE_DRAG;
xl = event.getX();
yl = event.getY();
matrix.set(dog.getImageMatrix());
break;
case MotionEvent.ACTION_POINTER_DOWN:
distanceStart = spacing(event);
if (distanceStart > 20) {
currentMode = MODE_ZOOM;
matrix.set(dog.getImageMatrix());
}
break;
case MotionEvent.ACTION_MOVE:
if (currentMode == MODE_DRAG) {
matrixNew.set(matrix);
float xn = event.getX();
float yn = event.getY();
//matrix.setTranslate(xn,yn);
matrixNew.postTranslate(xn - xl,yn -yl);
} else if (currentMode == MODE_ZOOM) {
double distance = spacing(event);
float scale = (float) (distance / distanceStart);
matrixNew.postScale(scale,scale);
}
break;
case MotionEvent.ACTION_UP:
currentMode = MODE_NONE;
break;
}
dog.setImageMatrix(matrixNew);
return true;
}
});
}
private double spacing(MotionEvent event) {
float x = 0;
float y = 0;
try {
x = event.getX(0) - event.getX(1);
y = event.getY(0) - event.getY(1);
} catch (IllegalArgumentException e) {}
return Math.sqrt(x * x + y * y);
}
}
private ImageView dog;
private float xl;
private float yl;
private final int MODE_DRAG = 1;
private final int MODE_ZOOM = 2;
private final int MODE_NONE = 0;
private int currentMode = MODE_NONE;
private double distanceStart;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drag_test);
initView();
}
Matrix matrix = new Matrix();
Matrix matrixNew = new Matrix();
private void initView() {
dog = (ImageView) findViewById(R.id.dog);
dog.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
currentMode = MODE_DRAG;
xl = event.getX();
yl = event.getY();
matrix.set(dog.getImageMatrix());
break;
case MotionEvent.ACTION_POINTER_DOWN:
distanceStart = spacing(event);
if (distanceStart > 20) {
currentMode = MODE_ZOOM;
matrix.set(dog.getImageMatrix());
}
break;
case MotionEvent.ACTION_MOVE:
if (currentMode == MODE_DRAG) {
matrixNew.set(matrix);
float xn = event.getX();
float yn = event.getY();
//matrix.setTranslate(xn,yn);
matrixNew.postTranslate(xn - xl,yn -yl);
} else if (currentMode == MODE_ZOOM) {
double distance = spacing(event);
float scale = (float) (distance / distanceStart);
matrixNew.postScale(scale,scale);
}
break;
case MotionEvent.ACTION_UP:
currentMode = MODE_NONE;
break;
}
dog.setImageMatrix(matrixNew);
return true;
}
});
}
private double spacing(MotionEvent event) {
float x = 0;
float y = 0;
try {
x = event.getX(0) - event.getX(1);
y = event.getY(0) - event.getY(1);
} catch (IllegalArgumentException e) {}
return Math.sqrt(x * x + y * y);
}
}