在Android中,事件主要包括点按、长按、拖拽、滑动等
-
按下(ACTION_DOWN)
-
移动(ACTION_MOVE)
-
抬起(ACTION_UP)
所有的事件操作都发生在触摸屏上,而在屏幕上与我们交互的就是各种各样的视图组件(View)
View的一些基本事件:
onTouchEvent
dispatchTouchEvent
我们就对这个两个事件进行分析下
-
dispatchTouchEvent
方法用于事件的分发,Android中所有的事件都必须经过这个方法的分发,
-
然后决定是自身消费当前事件还是继续往下分发给子控件处理。返回true表示不继续分发,事件没有被消费。
-
返回false则继续往下分发,如果是ViewGroup则分发给onInterceptTouchEvent进行判断是否拦截该事件。
-
onTouchEvent
方法用于事件的处理,返回true表示消费处理当前事件,返回false则不处理,交给子控件进行继续分发。
知道了这两个事件处理的原理后 就可以知道点击事件的运行流程如下图:
代码实现:
public class RTButton extends Button{
public RTButton(Context context,AttributeSet set) {
super(context,set);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
System.out.println("1---RTButton---touch---action_down");
break;
case MotionEvent.ACTION_MOVE:
System.out.println("1---RTButton---touch---action_move");
break;
case MotionEvent.ACTION_UP:
System.out.println("1---RTButton---touch---action_up");
break;
}
return super.onTouchEvent(event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
System.out.println("1---RTButton---dispatch---action_down");
break;
case MotionEvent.ACTION_MOVE:
System.out.println("1---RTButton---dispatch---action_move");
break;
case MotionEvent.ACTION_UP:
System.out.println("1---RTButton---dispatch---action_up");
break;
}
return super.dispatchTouchEvent(event);
}
}
public class RTButtonActivity extends Activity implements View.OnClickListener,View.OnTouchListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rtbutton);
initView();
}
private void initView() {
RTButton rtButton=(RTButton) findViewById(R.id.rtbtn_touch);
rtButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
System.out.println("----onclick-------------");
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
System.out.println("2---RTButton---touch---action_down");
break;
case MotionEvent.ACTION_MOVE:
System.out.println("2---RTButton---touch---action_move");
break;
case MotionEvent.ACTION_UP:
System.out.println("2---RTButton---touch---action_up");
break;
}
return false;
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
System.out.println("2---dispatchTouchEvent---DOWN");
break;
case MotionEvent.ACTION_MOVE:
System.out.println("2---dispatchTouchEvent---MOVE");
break;
case MotionEvent.ACTION_UP:
System.out.println("2---dispatchTouchEvent---UP");
break;
default:
break;
}
return super.dispatchTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
System.out.println("2---onTouchEvent---DOWN");
break;
case MotionEvent.ACTION_MOVE:
System.out.println("2---onTouchEvent---MOVE");
break;
case MotionEvent.ACTION_UP:
System.out.println("2---onTouchEvent---UP");
break;
default:
break;
}
return false;
}
}
测试用例:Activity dispatchTouchEvent --FALSE TouchEvent--FALSE
RTButton dispatchTouchEvent --FALSE TouchEvent--true
结果:
分享到:
相关推荐
Android事件处理机制
Android 事件处理机制分析 demo
这是我写的一个Android事件处理机制的word文档以及一个测试项目,有兴趣的可以一起讨论
在Android应用程序中,有一类...这个PPT讲Android应用程序输入事件的分发和处理过程,主要涉及到输入管理InputManager、输入事件监控线程InputReader、输入事件分发线程InputDispatcher,以及应用程序主线程消息循环。
博客配套说明:http://blog.csdn.net/xiaohao0724/article/details/54798908
UI编程通常都会伴随事件处理,Android也不例外,它提供了两种方式的事件处理:基于回调的事件处理和基于监听器的事件处理。 对于基于监听器的事件处理而言,主要就是为Android界面组件绑定特定的事件监听器;对于...
自己写的android事件分发、拦截、处理的代码,可以清楚知道事件分发、拦截和处理的过程。
3.1 Android事件处理概述 3.2 基于监听的事件处理 3.3 基于回调的事件处理 3.4 响应的系统设置的事件 3.5 Handler消息传递机制
android 异常处理机制 ,关于android 如何处理异常。
Android绘图机制与处理技巧(三)——Android图像处理之图形特效处理
android之Touch事件处理机制测试, 滑动事件冲突解决,ViewGroup中事件触发和传递机制
android:id="@+id/toggleButton01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_close"/> android:id="@+id/imageButton01" android:layout_...
之前笔者其实已经写过事件分发机制的文章:[快速理解android事件传递拦截机制概念](http://blog.csdn.net/double2hao/article/details/51541061) 但是,现在看来其实更像是一篇知识概括,多出可能未讲清楚,于是打算...
(1)理解Android的应用组件及其功能、特点 ...(3)理解并掌握Android的事件处理机制,掌握基于监听的事件处理机制和基于回调的事件处理机制使用方法 (4)了解Android的对话框与消息框,掌握Android的Toast。
Android View事件分发处理机制Demo,博客地址:http://blog.csdn.net/tianmi1988/article/details/49822829
Android提供了两种事件处理机制。 基于监听的事件处理机制 基于回调的事件处理机制 一、基于监听的事件处理机制 Android的事件监听机制就是一种”面向对象”的事件处理,是一种”委派模式(Delegate)”事件处理...
android click 和onTouch 事件处理机制,极其详细介绍
android广播时间处理机制学习小结,android开发技术方面的事件处理信息。
Android Touch事件传递机制解析