歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android實現對imageview的拖動以及縮放

Android實現對imageview的拖動以及縮放

日期:2017/3/1 10:48:30   编辑:Linux編程

Android實現對imageview的拖動以及縮放

  1. package org.wch.gesture;
  2. import android.graphics.Matrix;
  3. import android.graphics.PointF;
  4. import android.util.FloatMath;
  5. import android.util.Log;
  6. import android.view.MotionEvent;
  7. import android.view.View;
  8. import android.view.View.OnTouchListener;
  9. import android.widget.ImageView;
  10. import android.widget.ImageView.ScaleType;
  11. public class MulitPointTouchListener implements OnTouchListener {
  12. Matrix matrix = new Matrix();
  13. Matrix savedMatrix = new Matrix();
  14. public ImageView image;
  15. static final int NONE = 0;
  16. static final int DRAG = 1;
  17. static final int ZOOM = 2;
  18. int mode = NONE;
  19. PointF start = new PointF();
  20. PointF mid = new PointF();
  21. float oldDist = 1f;
  22. public MulitPointTouchListener(ImageView image) {
  23. super();
  24. this.image = image;
  25. }
  26. @Override
  27. public boolean onTouch(View v, MotionEvent event) {
  28. this.image.setScaleType(ScaleType.MATRIX);
  29. ImageView view = (ImageView) v;
  30. // dumpEvent(event);
  31. switch (event.getAction() & MotionEvent.ACTION_MASK) {
  32. case MotionEvent.ACTION_DOWN:
  33. Log.w("FLAG", "ACTION_DOWN");
  34. matrix.set(view.getImageMatrix());
  35. savedMatrix.set(matrix);
  36. start.set(event.getX(), event.getY());
  37. mode = DRAG;
  38. break;
  39. case MotionEvent.ACTION_POINTER_DOWN:
  40. Log.w("FLAG", "ACTION_POINTER_DOWN");
  41. oldDist = spacing(event);
  42. if (oldDist > 10f) {
  43. savedMatrix.set(matrix);
  44. midPoint(mid, event);
  45. mode = ZOOM;
  46. }
  47. break;
  48. case MotionEvent.ACTION_UP:
  49. Log.w("FLAG", "ACTION_UP");
  50. case MotionEvent.ACTION_POINTER_UP:
  51. Log.w("FLAG", "ACTION_POINTER_UP");
  52. mode = NONE;
  53. break;
  54. case MotionEvent.ACTION_MOVE:
  55. Log.w("FLAG", "ACTION_MOVE");
  56. if (mode == DRAG) {
  57. matrix.set(savedMatrix);
  58. matrix.postTranslate(event.getX() - start.x, event.getY()
  59. - start.y);
  60. } else if (mode == ZOOM) {
  61. float newDist = spacing(event);
  62. if (newDist > 10f) {
  63. matrix.set(savedMatrix);
  64. float scale = newDist / oldDist;
  65. matrix.postScale(scale, scale, mid.x, mid.y);
  66. }
  67. }
  68. break;
  69. }
  70. view.setImageMatrix(matrix);
  71. return true;
  72. }
  73. private float spacing(MotionEvent event) {
  74. float x = event.getX(0) - event.getX(1);
  75. float y = event.getY(0) - event.getY(1);
  76. return FloatMath.sqrt(x * x + y * y);
  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. }
  83. }
Copyright © Linux教程網 All Rights Reserved