/**     * 自定义触摸事件     * @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. 关于相对布局RelativeLayout的各种属性
  3. 关于相对布局RelativeLayout的各种属性介绍
  4. 谈一谈Android中的事件分发
  5. android游戏开发(三)触屏事件处理_手势识别
  6. Android单线程模型相关概念详解
  7. android游戏开发(三)触屏事件处理_手势识别
  8. Android(安卓)View绘制及事件(一)屏幕的视图层级,窗口概念初识
  9. Android(安卓)滑动侧边栏(Sliding Menu)第一种实现 - 2 手动滚动+

随机推荐

  1. android恶意程序分析 (一)
  2. android实现swipe的手势及页面拖动动画
  3. android屏幕分辨率
  4. Android内存分析总结
  5. android保存手势操作到文件&读取识别手势
  6. Android(安卓)context(Application/Activi
  7. [转载]Android开发者网址导航
  8. Android之SlidingDrawer抽屉效果
  9. android完整资讯App、Kotlin新闻应用MVP
  10. Android横竖屏切换总结