android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
来源:互联网 发布:知世故而不世故原句 编辑:程序博客网 时间:2024/05/17 03:32
看到下面代码中用了AND位运算是为了什么呢?
首先来看看这些常量的值
例如:ACTION_MASK & ACTION_POINTER_2_DOWN 即0x000000ff & 0×00000105=0x0000005
可以看到,and运算的结果总是小于等于0x000000ff,那就是说and之后,无论你多少根手指加进来,都是会ACTION_POINTER_DOWN或者ACTION_POINTER_UP
imgitem.setOnTouchListener(new OnTouchListener() { PointF start = new PointF(); PointF mid = new PointF(); float oldDist = 1f; 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; long startTime; public boolean onTouch(View v, MotionEvent event) { ImageView view = (ImageView) v; view.setScaleType(ScaleType.MATRIX); 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; // isclick = true; startTime = System.currentTimeMillis(); break; case MotionEvent.ACTION_POINTER_DOWN: // isclick = false; oldDist = spacing(event); if (oldDist > 10f) { savedMatrix.set(matrix); midPoint(mid, event); mode = ZOOM; } break; case MotionEvent.ACTION_UP: /*if (mode == DRAG && System.currentTimeMillis() - startTime < 150) { finish(); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); }*/ break; case MotionEvent.ACTION_POINTER_UP: mode = NONE; break; case MotionEvent.ACTION_MOVE: // isclick = false; 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); } });
2 0
- android多点触控统一的原理(使用event.getAction()&MotionEvent.ACTION_MASK的原因)
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- Androin学习笔记五十六: android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- 多点触控事件处理 ev.getAction() & MotionEvent.ACTION_MASK
- Android 多点触控实践解析及加入MotionEvent.ACTION_MASK的原因
- 多点触控之MotionEvent.ACTION_MASK作用
- 多点触控之MotionEvent.ACTION_MASK作用
- onTouchEvent(MotionEvent event)的使用
- Android的触摸事件MotionEvent event
- android MotionEvent getAction,getActionMasked,getActionIndex区别
- 详细剖析 android onInterceptTouchEvent(MotionEvent event) 和 onTouchEvent(MotionEvent event) 的事件传递机制
- 详细剖析 android onInterceptTouchEvent(MotionEvent event) 和 onTouchEvent(MotionEvent event) 的事件传递机制
- android多点触控的使用
- dispatchTouchEvent(),onTouchEvent(MotionEvent event),onInterceptTouchEvent(MotionEvent event)的事件处理
- Ubuntu14.04 LTS安装JDK和Eclipse
- java的重写与重载区别
- linux实用命令
- 过滤器解决Servlet中文乱码
- CF#215 DIV2: B. Sereja and Suffixes
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- 初等数学导论:最大公约数的线性组合
- Linux时间函数
- 平方pow(x,2)和按位异或^
- Tomcat 7.0 servlet 标注配置
- 黑白棋子的移动——深搜
- ios学习笔记之 类变量与实例变量区别
- 你正在处于什么模式?
- Android 3d云标签