import android.graphics.Matrix;   import android.graphics.PointF;   import android.util.FloatMath;   import android.view.MotionEvent;   import android.view.View;   import android.view.View.OnTouchListener;   import android.widget.ImageView;   public class MulitPointTouchListener implements OnTouchListener {           Matrix matrix = new Matrix();           Matrix savedMatrix = new Matrix();           static final int NONE = 0;           static final int DRAG = 1;           static final int ZOOM = 2;           int mode = NONE;           PointF start = new PointF();           PointF mid = new PointF();           float oldDist = 1f;           @Override           public boolean onTouch(View v, MotionEvent event) {                   ImageView view = (ImageView) v;                   switch (event.getAction() & MotionEvent.ACTION_MASK) {                   case MotionEvent.ACTION_DOWN:                           matrix.set(view.getImageMatrix());                           savedMatrix.set(matrix);                           start.set(event.getX(), event.getY());                           mode = DRAG;                                                    break;                   case MotionEvent.ACTION_POINTER_DOWN:                           oldDist = spacing(event);                           if (oldDist > 10f) {                                   savedMatrix.set(matrix);                                   midPoint(mid, event);                                   mode = ZOOM;                           }                           break;                   case MotionEvent.ACTION_UP:                   case MotionEvent.ACTION_POINTER_UP:                           mode = NONE;                           break;                   case MotionEvent.ACTION_MOVE:                           if (mode == DRAG) {                                   matrix.set(savedMatrix);                                   matrix.postTranslate(event.getX() - start.x, event.getY()                                                   - start.y);                           } else if (mode == ZOOM) {                                   float newDist = spacing(event);                                   if (newDist > 10f) {                                           matrix.set(savedMatrix);                                           float scale = newDist / oldDist;                                           matrix.postScale(scale, scale, mid.x, mid.y);                                   }                           }                           break;                   }                   view.setImageMatrix(matrix);                   return true;           }                              private float spacing(MotionEvent event) {                   float x = event.getX(0) - event.getX(1);                   float y = event.getY(0) - event.getY(1);                   return FloatMath.sqrt(x * x + y * y);           }                    private void midPoint(PointF point, MotionEvent event) {                   float x = event.getX(0) + event.getX(1);                   float y = event.getY(0) + event.getY(1);                   point.set(x / 2, y / 2);           }   }   imageView.setOnTouchListener(new MulitPointTouchListener ());在xml中要将图片的缩放格式改成Matrix     注:android:scaleType="matrix"   注:此文档为转载
原文地址: http://blog.csdn.net/hundsong/article/details/6532292

更多相关文章

  1. androidRadioGroup和RadioB…
  2. MpAndroidChart简单用法 属性总结
  3. android 实现图片的裁剪
  4. android短信监听
  5. android浏览器和iPhone浏览器
  6. 定制android主界面。让你自己写的Android的Launcher成为系统中第
  7. android 图片处理 resize 探秘(图片缩放、压缩问题)
  8. 移动开发:Android(安卓)错误警告信息解释
  9. OpenGL ES教程III之移动变换(原文对照)

随机推荐

  1. Jenkins+Ant+Android+Robitium 实例详解(
  2. Android Studio svn检出项目一直报错
  3. Android设备唯一标识ID的获取
  4. Android(安卓)TextView文字滚动
  5. 弹球效果动画
  6. [Android] 来电归属地查询的实现思路
  7. Android7.0背光调节
  8. android 10.0拍照显示并上传服务器
  9. 2010.10.30———Android 03
  10. Android 开发最佳实践