上一篇文章主要讲述了Android的TouchEvent的分发过程,其中有两个重要的函数:onInterceptTouchEvent和onTouchEvent,这两个函数可被重装以完成特定的逻辑。onInterceptTouchEvent的定义为于ViewGroup中,默认返回值为false,表示不拦截TouchEvent。onTouchEvent的定义位于View中,当ViewGroup要调用onTouchEvent时,会利用super.onTouchEvent。ViewGroup调用onTouchEvent默认返回false,表示不消耗touch事件,View调用onTouchEvent默认返回true,表示消耗了touch事件。考虑到onInterceptTouchEvent与onTouchEven在写UI的时候经常会用到,下面以一个例子来讲解一下。
先创建一个类MyView,继承自View
public class MyView extends Button {
private static final String TAG = MyView.class.getName();
public MyView(Context context){
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d(TAG, "onTouchEvent.");
LogUtil.logAction(event, TAG);
return super.onTouchEvent(event);
}
}
创建类MyLayout,继承自ViewGroup
public class MyLayout extends FrameLayout{
private static final String TAG = MyLayout.class.getName();
public MyLayout(Context context) {
super(context);
}
public MyLayout(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.d(TAG, "onI

本文介绍了Android中ViewGroup的onInterceptTouchEvent和View的onTouchEvent在触摸事件分发中的作用。通过实例分析,详细解释了不同情况下两个方法的返回值如何影响事件的处理流程,并探讨了事件类型的变化。当onInterceptTouchEvent返回false时,事件传递给子View;返回true则拦截事件。onTouchEvent返回true表示消耗事件,返回false则事件不被消耗。
最低0.47元/天 解锁文章
331

被折叠的 条评论
为什么被折叠?



