您的位置:首页 > 移动开发 > Android开发

MotionEvent Android API level 21

2015-04-30 17:48 246 查看
最近遇到一个跟MotionEvent相关的问题,顺便了解一下相关知识,理解不是很深刻,看到多少写多少吧,仅供参考。public final class

MotionEvent

extends InputEventimplements Parcelable
java.lang.Object
android.view.InputEvent
android.view.MotionEvent
MotionEvent主要是用来上报手指、触控板、鼠标等移动事件,并可以通过MotionEvent提供的相关方法获得与移动事件相关的参数。具体可以详见Google API reference和MotiionEventsource code。常用的就一下几种事件:
/**
* Constant for {@link #getActionMasked}: A pressed gesture has started, the
* motion contains the initial starting location.
* <p>
* This is also a good time to check the button state to distinguish
* secondary and tertiary button clicks and handle them appropriately.
* Use {@link #getButtonState} to retrieve the button state.
* </p>
*/
publicstatic finalint ACTION_DOWN= 0;
/**
* Constant for {@link #getActionMasked}: A pressed gesture has finished, the
* motion contains the final release location as well as any intermediate
* points since the last down or move event.
*/
publicstatic finalint ACTION_UP= 1;
/**
* Constant for {@link #getActionMasked}: A change has happened during a
* press gesture (between {@link #ACTION_DOWN} and {@link #ACTION_UP}).
* The motion contains the most recent point, as well as any intermediate
* points since the last down or move event.
*/
publicstatic finalint ACTION_MOVE= 2;
/**
* Constant for {@link #getActionMasked}: The current gesture has been aborted.
* You will not receive any more points in it. You should treat this as
* an up event, but not perform any action that you normally would.
*/
publicstatic finalint ACTION_CANCEL= 3;
/**
* Constant for {@link #getActionMasked}: A movement has happened outside of the
* normal bounds of the UI element. This does not provide a full gesture,
* but only the initial location of the movement/touch.
*/
publicstatic finalint ACTION_OUTSIDE=4;
/**
* Constant for {@link #getActionMasked}: A non-primary pointer has gone down.
* <p>
* Use {@link #getActionIndex} to retrieve the index of the pointer that changed.
* </p><p>
* The index is encoded in the {@link #ACTION_POINTER_INDEX_MASK} bits of the
* unmasked action returned by {@link #getAction}.
* </p>
*/
publicstatic finalint ACTION_POINTER_DOWN=5;
/**
* Constant for {@link #getActionMasked}: A non-primary pointer has gone up.
* <p>
* Use {@link #getActionIndex} to retrieve the index of the pointer that changed.
* </p><p>
* The index is encoded in the {@link #ACTION_POINTER_INDEX_MASK} bits of the
* unmasked action returned by {@link #getAction}.
* </p>
*/
publicstatic finalint ACTION_POINTER_UP=6;
Google API 给出的关于ACTION_CANCEL这个事件的解释是你可以把它当做是ACTION_UP,但实际上什么事都不会做。实际使用中也极少使用到这个状态,通常都是与事件ACTION_UP做相同处理。印象里Google提供的触摸和按住延迟功能开启后才有ACTION_CANCEL事件上报用来取消操作。所以我们可以笼统的认为所有的触控事件都是以ACTION_DOWN开始以ACTION_UP。快速点击事件:04-30 17:36:54.795: D/MotionEventTest(12422): ACTION_DOWN04-30 17:36:54.798: D/MotionEventTest(12422): ACTION_UP长按事件:04-30 17:38:43.222: D/MotionEventTest(12422): ACTION_DOWN04-30 17:38:43.253: D/MotionEventTest(12422): ACTION_MOVE04-30 17:38:43.286: D/MotionEventTest(12422): ACTION_MOVE04-30 17:38:43.317: D/MotionEventTest(12422): ACTION_MOVE04-30 17:38:44.433: D/MotionEventTest(12422): ACTION_MOVE04-30 17:38:44.448: D/MotionEventTest(12422): ACTION_MOVE04-30 17:38:44.455: D/MotionEventTest(12422): ACTION_UP移动事件:04-30 17:40:56.330: D/MotionEventTest(12422): ACTION_DOWN04-30 17:40:56.630: D/MotionEventTest(12422): ACTION_MOVE很多个ACTION_MOVE事件04-30 17:40:58.278: D/MotionEventTest(12422): ACTION_UP多指触控事件:04-30 17:42:45.080: D/MotionEventTest(12422): ACTION_DOWN04-30 17:42:45.083: D/MotionEventTest(12422): ACTION_POINTER_DOWN04-30 17:42:45.102: D/MotionEventTest(12422): ACTION_MOVE04-30 17:42:45.168: D/MotionEventTest(12422): ACTION_MOVE04-30 17:42:45.185: D/MotionEventTest(12422): ACTION_MOVE04-30 17:42:45.202: D/MotionEventTest(12422): ACTION_MOVE04-30 17:42:45.607: D/MotionEventTest(12422): ACTION_MOVE04-30 17:42:45.624: D/MotionEventTest(12422): ACTION_MOVE04-30 17:42:45.641: D/MotionEventTest(12422): ACTION_MOVE04-30 17:42:45.646: D/MotionEventTest(12422): ACTION_POINTER_UP04-30 17:42:45.961: D/MotionEventTest(12422): ACTION_MOVE04-30 17:42:45.968: D/MotionEventTest(12422): ACTION_MOVE04-30 17:42:45.974: D/MotionEventTest(12422): ACTION_UPGoogle API reference: http://api.apkbus.com/reference/android/view/MotionEvent.html MotiionEvent source code: https://github.com/banxi1988/platform_frameworks_base/blob/master/core/java/android/view/MotionEvent.java 自己写了个小的debug demon帮助理解MotionEventpackage com.example.motionevent;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.MotionEvent;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getActionMasked()) {case MotionEvent.ACTION_POINTER_DOWN:Log.d("MotionEventTest","ACTION_POINTER_DOWN");break;case MotionEvent.ACTION_POINTER_UP:Log.d("MotionEventTest","ACTION_POINTER_UP");break;case MotionEvent.ACTION_DOWN:Log.d("MotionEventTest","ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:Log.d("MotionEventTest","ACTION_MOVE");break;case MotionEvent.ACTION_UP:Log.d("MotionEventTest","ACTION_UP");break;case MotionEvent.ACTION_CANCEL:Log.d("MotionEventTest","ACTION_CANCEL");break;default:Log.d("liji3","default");break;}return super.onTouchEvent(event);}}
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: