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(安卓)Studio(一)】从Eclipse迁移
  2. TextView 借助Linkify,使用自定义模式设置
  3. android:xmlns的作用以及自定义
  4. Android(安卓)Activity启动流程分析
  5. Android作业之组建通讯与后台服务 1
  6. EPSON Printer 打印机 Sdk For Android
  7. 《Frida高级逆向》训练营,7 月再开营!
  8. Android(安卓)Studio中学习Android(安卓)
  9. 每天记录学习的新知识 :蓝牙BLE数据传输记
  10. Android之隐式意图(Intent)如何查找匹配