Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. boolean isMoved=true;
  2. Matrix matrix=new Matrix();
  3. Matrix savedMatrix=new Matrix();
  4. PointF startPoint=new PointF();
  5. PointF midPoint=new PointF();
  6. float oldDist = 1f;
  7. int NONE = 0;
  8. int DRAG = 1;
  9. int ZOOM = 2;
  10. int mode = NONE;
  11. public boolean onTouch(View v, MotionEvent event) {
  12.  
  13. ImageView imageView = (ImageView) v;
  14. imageView.setScaleType(ScaleType.MATRIX);
  15.  
  16. switch (event.getAction() & MotionEvent.ACTION_MASK) {
  17.  
  18. case MotionEvent.ACTION_DOWN:
  19. matrix.set(imageView.getImageMatrix());
  20. isMoved = false;
  21. startPoint.set(event.getX(), event.getY());
  22. savedMatrix.set(matrix);
  23. mode = DRAG;
  24. break;
  25.  
  26. case MotionEvent.ACTION_UP:
  27. if (!isMoved) {
  28. v.performClick();
  29. }
  30. break;
  31.  
  32. case MotionEvent.ACTION_POINTER_UP:
  33. mode = NONE;
  34. savedMatrix.set(matrix);
  35. break;
  36.  
  37. case MotionEvent.ACTION_MOVE:
  38.  
  39. if (mode == DRAG) {
  40. matrix.set(savedMatrix);
  41. matrix.postTranslate(event.getX() - startPoint.x, event.getY()
  42. - startPoint.y);
  43. } else if (mode == ZOOM) {
  44.  
  45. float newDist = spacing(event);
  46. if (newDist > 10f) {
  47. matrix.set(savedMatrix);
  48. float scale = newDist / oldDist;
  49. matrix.postScale(scale, scale, midPoint.x, midPoint.y);
  50. }
  51. }
  52. isMoved = true;
  53. break;
  54.  
  55. case MotionEvent.ACTION_POINTER_DOWN:
  56.  
  57. oldDist = spacing(event);
  58.  
  59. if (oldDist > 10f) {
  60. savedMatrix.set(matrix);
  61. midPoint(midPoint, event);
  62. mode = ZOOM;
  63. isMoved = false;
  64. }
  65. break;
  66. }
  67.  
  68. imageView.setImageMatrix(matrix);
  69. return true;
  70. }
  71. @SuppressLint("FloatMath")
  72. private float spacing(MotionEvent event) {
  73. float x = event.getX(0) - event.getX(1);
  74. float y = event.getY(0) - event.getY(1);
  75. return (float) Math.sqrt(x * x + y * y);
  76. }
  77.  
  78. private void midPoint(PointF point, MotionEvent event) {
  79. float x = event.getX(0) + event.getX(1);
  80. float y = event.getY(0) + event.getY(1);
  81. point.set(x / 2, y / 2);
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement