package org.wch.gesture;import android.graphics.Matrix;  import android.graphics.PointF;  import android.util.FloatMath;  import android.util.Log;import android.view.MotionEvent;  import android.view.View;  import android.view.View.OnTouchListener;  import android.widget.ImageView;  import android.widget.ImageView.ScaleType;  public class MulitPointTouchListener implements OnTouchListener {  Matrix matrix = new Matrix();  Matrix savedMatrix = new Matrix();  public ImageView image;  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;  public MulitPointTouchListener(ImageView image) {  super();  this.image = image;  }  @Override  public boolean onTouch(View v, MotionEvent event) {  this.image.setScaleType(ScaleType.MATRIX);  ImageView view = (ImageView) v;  //dumpEvent(event);  switch (event.getAction() & MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_DOWN:  Log.w("FLAG", "ACTION_DOWN");matrix.set(view.getImageMatrix());  savedMatrix.set(matrix);  start.set(event.getX(), event.getY());  mode = DRAG;  break;  case MotionEvent.ACTION_POINTER_DOWN:  Log.w("FLAG", "ACTION_POINTER_DOWN");oldDist = spacing(event);  if (oldDist > 10f) {  savedMatrix.set(matrix);  midPoint(mid, event);  mode = ZOOM;  }  break;  case MotionEvent.ACTION_UP:  Log.w("FLAG", "ACTION_UP");case MotionEvent.ACTION_POINTER_UP:  Log.w("FLAG", "ACTION_POINTER_UP");mode = NONE;  break;  case MotionEvent.ACTION_MOVE:  Log.w("FLAG", "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);  }  } 


更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android 自定义view的简单应用(2) 毛玻璃效
  2. android 进度条垂直动态上升下降达到警告
  3. android textview宽度固定的情况下字体大
  4. Spinner 下拉列表 demo
  5. android中的OOM问题 解决原则
  6. Android 3D 旋转的三角形(一)
  7. Android 事件总线OTTO用法快速入门
  8. Spinner 使用
  9. asa
  10. android 调用相机拍照 伪闪退