读书人

详细辨析 android onInterceptTouchEv

发布时间: 2013-01-28 11:49:56 作者: rapoo

详细剖析 android onInterceptTouchEvent(MotionEvent event) 和 onTouchEvent(MotionEvent event) 的事件传递机制

最近遇到 添加 ScrollView 之后 某些组件的 onTouchEvent() 没有响应,现在我们来解剖一下android 对于这种事件的处理和内部的传递机制。



1.ViewGroup代表可以包含子组件的类,例如我们的(LinearLayout、TableLayout、ScrollView);

2.ChildView 代表不能包含其他组件的类 ,例如我们的(Button、TextView、EditText);


对于 ViewGroup 有包含 onInterceptTouchEvent(MotionEvent event)onTouchEvent(MotionEvent event)

而且 ChildView 只包含了 onTouchEvent(MotionEvent event)


如果有疑问的话可以去看一下 Button 和 TextView 的 API 里面确实查不到 onInterceptTouchEvent(MotionEvent event)


===============================================================================


为了大家更好理解我制作成图片了。


需要用到的源代码 MainActivity.java myScroll.java(继承 ScrollView) myLayout.java(继承 LinearLayout) myText.java(继承 EditText) activity_main.xml(布局文件)

//MainActivity.java
package com.example.lab;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}


  

当我们触发屏幕事件的时候(点击屏幕、手指在屏幕上移动) 事件的传播流程是这样的。

如果 onInterceptTouchEvent() 返回的是 false(说明事件会传递下去),这里可以把 onInterceptTouchEvent() 看成是守门人,当它返回 false 的时候,证明目前这个类的 onTouchEvent 不是用来处理这个事件的,事件继续向内传播,如果返回 true 则由本类的onTouchEvent 进行处理,并停止事件的传播


制作这张图,看起来可能会直观一点。


详细辨析 android onInterceptTouchEvent(MotionEvent event) 和 onTouchEvent(MotionEvent event) 的事件传递机制


其实onInterceptTouchEvent() 就是判断事件,OntouchEvent()就是处理事件。


技术在于交流,如有不懂请留言。我的QQ 1396686515;






读书人网 >Android

热点推荐