Android 两点缩放图片


Android 两点缩放图片:

本文工程源码下载:

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /pub/Android源码集锦/2011年/11月/Android 两点缩放图片/

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

相关内容