/**     * 自定义触摸事件     * @author tian     *     */private class TouchListener implements OnTouchListener{ private PointF startPoint = new PointF();     private Matrix matrix = new Matrix();     private Matrix currentMaritx = new Matrix();          private int mode = 0;//用于标记模式     private static final int DRAG = 1;//拖动     private static final int ZOOM = 2;//放大     private float startDis = 0;     private PointF midPoint;//中心点@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubswitch (event.getAction() & MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:mode = DRAG;currentMaritx.set(imageView.getImageMatrix());//记录ImageView当期的移动位置startPoint.set(event.getX(),event.getY());//开始点break;case MotionEvent.ACTION_MOVE://移动事件if (mode == DRAG) {//图片拖动事件float dx = event.getX() - startPoint.x;//x轴移动距离float dy = event.getY() - startPoint.y;matrix.set(currentMaritx);//在当前的位置基础上移动matrix.postTranslate(dx, dy);} else if(mode == ZOOM){//图片放大事件float endDis = distance(event);//结束距离if(endDis > 10f){float scale = endDis / startDis;//放大倍数matrix.set(currentMaritx);matrix.postScale(scale, scale, midPoint.x, midPoint.y);}}break; case MotionEvent.ACTION_UP:    mode = 0;    break;   //有手指离开屏幕,但屏幕还有触点(手指) case MotionEvent.ACTION_POINTER_UP:    mode = 0;    break;   //当屏幕上已经有触点(手指),再有一个手指压下屏幕 case MotionEvent.ACTION_POINTER_DOWN:    mode = ZOOM;    startDis = distance(event);    if(startDis > 10f){//避免手指上有两个茧     midPoint = mid(event);     currentMaritx.set(imageView.getImageMatrix());//记录当前的缩放倍数    }    break;   }imageView.setImageMatrix(matrix);return true;  }}    /**     * 两点之间的距离     * @param event     * @return     */    private static float distance(MotionEvent event){     //两根线的距离     float dx = event.getX(1) - event.getX(0);     float dy = event.getY(1) - event.getY(0);     return FloatMath.sqrt(dx*dx + dy*dy);    }    /**     * 计算两点之间中心点的距离     * @param event     * @return     */    private static PointF mid(MotionEvent event){     float midx = event.getX(1) + event.getX(0);     float midy = event.getY(1) - event.getY(0);     return new PointF(midx/2, midy/2);    }

更多相关文章

  1. andriod item内checked的setOnClickListener事件和setOnItemClic
  2. 谈一谈Android中的事件分发
  3. android游戏开发(三)触屏事件处理_手势识别
  4. Android View绘制及事件(一)屏幕的视图层级,窗口概念初识
  5. Android 滑动侧边栏(Sliding Menu)第一种实现 - 2 手动滚动+自动滚
  6. (三)Android事件分发机制 - Activity篇
  7. android 按钮点击的两种方法以及长按事件
  8. Android LinearLayout 嵌套 button 监听LinearLayout的onClickLi
  9. android 获取对话框关闭事件

随机推荐

  1. Native+WebApp中Phonegap调用Android(安
  2. android开发学习大纲
  3. Android之UI学习篇十一:ListView控件学习(
  4. Android之Handler用法总结
  5. android 获取路径目录方法以及判断目录是
  6. Android(安卓)WebView总结
  7. 关于android Widgets桌面小插件的开发大
  8. android:使用Gon解析解析json
  9. 两篇关于Android(安卓)App Widgets 的文
  10. Android(安卓)ContentProvider的使用