有关touchEvent的事件里都有一个MotionEvent 参数,下面来简单介绍一下它的属性的一些含义和使用的方法
通常单指操作时,一般如下:
switch (event.getAction()) {//第一个触摸点
case MotionEvent.ACTION_DOWN: //按下 = 0
<span style="white-space:pre"> float x = event.getX();</span>
break;
case MotionEvent.ACTION_MOVE: //移动 = 2
break;
case MotionEvent.ACTION_UP: // 抬起 = 1
break;
}
多点触摸时:
以下属性在api level 5出现,api level 8过时。
MotionEvent.ACTION_POINTER_1_DOWN
MotionEvent.ACTION_POINTER_2_DOWN
MotionEvent.ACTION_POINTER_3_DOWN
MotionEvent.ACTION_POINTER_1_UP
MotionEvent.ACTION_POINTER_2_UP
MotionEvent.ACTION_POINTER_3_UP
api level 8 即2.2后起用:MotionEvent.ACTION_POINTER_DOWNMotionEvent.ACTION_POINTER_UP
通过以下测试发现,单点触摸时,
switch (event.getAction()) {
// case MotionEvent.ACTION_DOWN: //按下 = 0
// System.out.println("onTouchEvent");
// break;
// case MotionEvent.ACTION_MOVE://移动 = 2
//
// break;
// case MotionEvent.ACTION_UP:// 抬起 = 1
//
// break;
case MotionEvent.ACTION_POINTER_DOWN://非第一个触摸点按下 = 5
System.out.println("ACTION_POINTER_DOWN");
break;
case MotionEvent.ACTION_POINTER_UP: //非第一个触摸点抬起 = 6
System.out.println("ACTION_POINTER_UP");
break;
default:
break;
}
MotionEvent.ACTION_POINTER_DOWNMotionEvent.ACTION_POINTER_UP 未执行
第二个点以后取x、y坐标值
float x2 = event.getX(event.getActionIndex());//action index 从0开始到pointer count -1 结束
float y2 = event.getY(event.getActionIndex());//某个index的触摸点的 相对于当前view的y坐标
event.getPointerCount(); //触摸点的数量
多点时获取坐标 索引 id 示例
int pointerCount = event.getPointerCount();
// switch (event.getAction() & MotionEvent.ACTION_MASK) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_MOVE:
for (int i = 0; i < pointerCount; i++) {
int id = event.getPointerId(i); //同一点的id值保持不变
int index = i;//同一点的索引值,是可变的,当由多指逐渐减少时,index--
dx = (int) event.getX(index);
dy = (int) event.getY(index);
}
invalidate();
break;
case MotionEvent.ACTION_CANCEL:
default:
break;
}
分享到:
相关推荐
ndroid中的MotionEvent 及其它事件处理
Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)、onTouchEvent(MotionEvent ev);能够响应这些方法的控件包括:ViewGroup、View、Activity。...
主要介绍了Android触屏事件和MotionEvent详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
Android MotionEvent中getX()与getRawX()都是获取屏幕坐标(横),但二者又有区别 getX() : 是获取相对当前控件(View)的坐标 getRawX() : 是获取相对显示屏幕左上角的坐标
主要介绍了Android开发中MotionEvent坐标获取方法,结合实例形式分析了MotionEvent获取坐标的相关函数使用方法与相关注意事项,需要的朋友可以参考下
Android中与Touch事件相关的方法包括:dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)、onTouchEvent(MotionEvent ev);能够响应这些方法的控件包括:ViewGroup、View、Activity。继承...
android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法:1)publicbooleandispatchTouchEvent(MotionEvent ev)这个方法用来分发TouchEvent2)publicbooleanonInterceptTouchEvent...
android_触摸事件Demo,此demo主要用于调查安卓触摸时间
View的onInterceptTouchEvent(MotionEvent ev)和dispatchTouchEvent(MotionEvent ev) 解析
android 中的事件处理一直以来困扰不少刚刚从事android开发的同学,网上也有不少讲解android事件分发的文章,然而讲解的都不够简洁!现在我将用另一种简洁的方式来讲解android事件的分发机制! android的事件分发...
motionevent的使用,其中也包括对OnTouchListener的调用
大家都知道,我们的activity中有onTouchEvent方法,可以用来实现触摸事件的监听。 activity的触摸事件 @Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); } ...
Number of float items per entry in a DVM sample data array.
3. onShowPress(MotionEvent e):down事件发生而move或则up还没发生前触发该事件; 4. onLongPress(MotionEvent e):长按事件; 5. onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):...
基于monkey原理,利用反射、蓝牙传送数据实现的事件注入。一个鼠标端采集注入事件(Motionevent、keyevent),一个显示器端实现事件注入,通过一个手机控制另外一个手机。
Android 下两种广播机制方法,已通知几点会议和闹钟为例
EventBus是一个非常强大的开源框架,可以同线程,跨线程传递事件,...总所周知,安卓无法在子线程中操控ui控件,此框架可以解决这个问题,而且在大项目,非常频繁的需要跨线程传递事件的时候,方便的优势就体现出来了。
android中的事件处理,以及解决滑动冲突问题都离不开事件分发机制,android中的事件流,即MotionEvent都会经历一个从分发,拦截到处理的一个过程。即dispatchTouchEvent(),onInterceptEvent()到onTouchEvent()的一个...