歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 兩點縮放圖片

Android 兩點縮放圖片

日期:2017/3/1 11:08:16   编辑:Linux編程

Android 兩點縮放圖片:

本文工程源碼下載:

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /pub/Android源碼集錦/2011年/11月/Android 兩點縮放圖片/

  1. package mutl.touch.sample;
  2. import android.app.Activity;
  3. import android.graphics.Matrix;
  4. import android.graphics.PointF;
  5. import android.os.Bundle;
  6. import android.util.FloatMath;
  7. import android.view.MotionEvent;
  8. import android.view.View;
  9. import android.view.View.OnTouchListener;
  10. import android.widget.ImageView;
  11. public class Main extends Activity
  12. {
  13. private static final int NONE = 0;
  14. private static final int DRAG = 1;
  15. private static final int ZOOM = 2;
  16. private int mode = NONE;
  17. private float oldDist;
  18. private Matrix matrix = new Matrix();
  19. private Matrix savedMatrix = new Matrix();
  20. private PointF start = new PointF();
  21. private PointF mid = new PointF();
  22. @Override
  23. public void onCreate(Bundle savedInstanceState)
  24. {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.main);
  27. ImageView view = (ImageView) findViewById(R.id.image_view);
  28. view.setOnTouchListener(new OnTouchListener()
  29. {
  30. @Override
  31. public boolean onTouch(View v, MotionEvent event)
  32. {
  33. ImageView view = (ImageView) v;
  34. switch (event.getAction() & MotionEvent.ACTION_MASK)
  35. {
  36. case MotionEvent.ACTION_DOWN:
  37. savedMatrix.set(matrix);
  38. start.set(event.getX(), event.getY());
  39. mode = DRAG;
  40. break;
  41. case MotionEvent.ACTION_UP:
  42. case MotionEvent.ACTION_POINTER_UP:
  43. mode = NONE;
  44. break;
  45. case MotionEvent.ACTION_POINTER_DOWN:
  46. oldDist = spacing(event);
  47. if (oldDist > 10f)
  48. {
  49. savedMatrix.set(matrix);
  50. midPoint(mid, event);
  51. mode = ZOOM;
  52. }
  53. break;
  54. case MotionEvent.ACTION_MOVE:
  55. if (mode == DRAG)
  56. {
  57. matrix.set(savedMatrix);
  58. matrix.postTranslate(event.getX() - start.x,
  59. event.getY() - start.y);
  60. }
  61. else if (mode == ZOOM)
  62. {
  63. float newDist = spacing(event);
  64. if (newDist > 10f)
  65. {
  66. matrix.set(savedMatrix);
  67. float scale = newDist / oldDist;
  68. matrix.postScale(scale, scale, mid.x, mid.y);
  69. }
  70. }
  71. break;
  72. }
  73. // 圖片設置矩陣
  74. view.setImageMatrix(matrix);
  75. return true;
  76. }
  77. private float spacing(MotionEvent event)
  78. {
  79. float x = event.getX(0) - event.getX(1);
  80. float y = event.getY(0) - event.getY(1);
  81. return FloatMath.sqrt(x * x + y * y);
  82. }
  83. private void midPoint(PointF point, MotionEvent event)
  84. {
  85. float x = event.getX(0) + event.getX(1);
  86. float y = event.getY(0) + event.getY(1);
  87. point.set(x / 2, y / 2);
  88. }
  89. });
  90. }
  91. }
Copyright © Linux教程網 All Rights Reserved