这部分涉及到触摸事件,需要认识
- public boolean onTouchEvent(MotionEvent event)
这里面的event参数,为手机屏幕触摸事件封装类的对象,包含了如触摸位置、类型、时间等。在屏幕被触摸时创建该对象。
该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。
实现OnTouchListener接口,然后重写方法
- public boolean onTouch(View v, MotionEvent event);
其中关于event.getAction()。就是设计到了TouchEvent事件。
Android中一次的TouchEvent事件用一个32位的整型值表示,其中touch事件的具体动作使用低8位表示,像按下,抬起,滑动等等。而多点触控时的按下、抬起,这个和单点是区分开的,相关的方法有:
- getAction: 包含了事件的动作,触控点信息
- getActionMask: 触摸的动作,包含了一个点的按下、抬起,多个点的按下、抬起。
- getActionIndex: 触控点相关信息
有一般用到的有:
- MotionEvent.ACTION_DOWN:屏幕上在第一个点被按下时触发
- MotionEvent.ACTION_UP:当屏幕上最后一个的点被放开时触发
- MotionEvent.ACTION_POINTER_DOWN:当屏幕上已经有点被按住,此时再按下一个点时触发。
- MotionEvent.ACTION_POINTER_UP:当屏幕上有多个点被按住,松开其中一个点时触发(即非最后一个点被放开时)。
- MotionEvent.ACTION_MOVE:当有点在屏幕上移动时触发。值得注意的是,由于它的灵敏度很高,而我们的手指又不可能完全静止(即使我们感觉不到移动,但其实我们的手指也在不停地抖动),所以实际的情况是,基本上只要有点在屏幕上,此事件就会一直不停地被触发。
可以根据触发的事件不同来判断屏幕上的点的个数
- switch (event.getAction() & MotionEvent.ACTION_MASK) {
- case MotionEvent.ACTION_DOWN: //唯一一个点
- mode = 1;
- break;
- case MotionEvent.ACTION_UP: //零个点
- mode = 0;
- break;
- case MotionEvent.ACTION_POINTER_UP://多个点
- mode -= 1;
- break;
- case MotionEvent.ACTION_POINTER_DOWN: //多个点,放开了一个点
- mode += 1;
- break;
- }
关于ImageView使用
android:scaleType="matrix"
这个属性设计了
图片在View上显示时的样式,像进行缩放、显示部分或全部等。(此属性还有比较多的东西,这里不去考虑,可参考http://blog.csdn.net/encienqi/article/details/7913262关于详解android:scaleType属性进行了解)
可以在配置文件中设置,或在代码中添加。
setImageMatrix(matrix);
其中matrix用矩阵来绘制,动态缩小放大图片来显示。
RectF的使用
RectF rect = new RectF(float left,float top,float right,float bottom);通过四个参数,分别矩形的四个坐标。
matrix.mapRect(rect);
使用 Matrix 的 setScale()、postTranslate()、postScale() 方法来对图片的移动方式进行设置。