这两天写了一个自定义滑动翻页,类似主页切换效果的组件。
动态加载到组件中的包含Button,Checkbox,ImageButton,这些组件都绑定OnClickListener。
在TextView组件和空白处滑动时,可以切换页面,一旦在Button,CheckBox等上面滑动时,就无法执行切换页面了。
这让我很郁闷。Google+百度了很久,了解Android的Touch事件处理流程。终于得到解决方法:
自执行,再派发。
以下代码是我组件的代码,Override了onInterceptTouchEvent的方法。关键是先执行了本类的TouchEvent处理,再分派给子View。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev){
if(mIsTouched && mIsDragging){
return true;
}else{
//这是我组件的处理TouchEvent的方法
onFlipperTouchEvent(ev);
//释放TouchEvent
return super.onInterceptTouchEvent(ev);
}
}
mIsTouched 和 mIsDragging 通过GestureDetector判断,不在此讨论。
特记录下来,希望给遇到同样问题的人一个解决思路。
分享到:
相关推荐
Android的触摸事件会沿着View层次结构自顶向下传递,从Activity到Window,再到布局及各个子View。每个View都有机会处理这些事件,通过重写`onTouchEvent()`方法。如果一个View未完全消耗事件(即没有返回`true`),...
2. 拦截事件:通过重写ViewGroup的onInterceptTouchEvent(),可以改变默认行为,让父View拦截并处理事件,而不再将事件传递给子View。 3. 事件消耗:在onTouchEvent()中,通常需要根据ACTION_DOWN、ACTION_UP等事件...
在Android系统中,TouchEvent事件处理是用户界面交互的核心部分,它涉及到UI组件的触摸响应,是应用程序接收并处理用户触摸屏幕动作的主要方式。本篇将深入解析Android的TouchEvent事件传递机制,帮助开发者更好地...
`dispatchTouchEvent`负责分发事件,而`onInterceptTouchEvent`允许父View拦截并处理事件,而不是将其传递给子View。 在`HelloTouchEvent`的示例中,我们可能看到如何利用这些方法来改变默认的事件分发行为。比如,...
只是一套自定义的view和Viewgroup,都是很简单的代码,为了避免麻烦就上传上来了,看touchevent传递的时候可以在dispatchTouchevent和touchevent中打上断点,调试就行了. 只有dispatchTouchEvent和TouchEvent
5. **事件派发模式**:cocos2d-x有两种事件派发模式:`DispatchMode::ALL_AT_ONCE`(同时派发所有触摸事件)和`DispatchMode::ONE_BY_ONE`(一次派发一个触摸事件)。默认模式是`DispatchMode::ONE_BY_ONE`,在这种...
在Android开发中,TouchEvent是处理用户触摸屏幕交互的核心机制。本文将深入解析Android TouchEvent的工作流程,帮助开发者更好地理解和利用这一关键功能。 Android系统通过MotionEvent类来封装触摸事件的信息,...
事件会沿着View层次结构自顶向下传递,即从父View到子View,这个过程称为事件分发。如果某个View不处理特定事件,事件会继续传递给其子View,直至被处理或被消费。 在描述中提到的"TouchEventActivity"可能是一个...
这个例子中,我们创建了一个名为`DraggableObject`的类,它继承自`Sprite`并监听`TouchEvent`。当触摸开始时,记录初始触摸位置;当触摸移动时,根据当前触摸位置更新元件的位置;当触摸结束时,重新添加移动事件...
第二个自定义View可能是用来处理触摸事件(TouchEvent)和手势识别的。在Android中,通过重写onTouchEvent()方法,我们可以捕获用户的触摸动作,包括ACTION_DOWN、ACTION_MOVE和ACTION_UP等。在这个过程中,我们需要...
但是,有时候我们可能希望父View能捕获这些事件,例如在滑动菜单或者抽屉布局中,就需要父View拦截并处理触摸事件。 `onInterceptTouchEvent` 返回一个布尔值,表示是否拦截当前的MotionEvent。如果返回true,那么...
父View在这里有机会决定事件是应该自己处理还是传递给子View。默认情况下,父View会尝试将事件传递给子View。 3. **onInterceptTouchEvent()** 父View可以通过重写`onInterceptTouchEvent()`来拦截事件。如果返回`...
TouchEvent的dispatchTouchEvent事件分发流程图
`Test_TouchEvent`可能是这个DEMO中的主要测试类,它可能包含了一个自定义的View或者Activity,用于演示触摸事件的监听和处理。在这个类中,开发者可能会重写`onTouchEvent(MotionEvent event)`方法,通过`event.get...
4. **TouchEvent的传递**:在多点触控环境中,父View需要正确处理并转发TouchEvent给子View。`onInterceptTouchEvent(MotionEvent ev)`和`onTouchEvent(MotionEvent ev)`这两个方法在事件传递过程中起关键作用。在...
1. **事件传递链(Event Dispatching Chain)**:当一个事件发生时,它会在View层次结构中从父到子进行传递,直到某个View消耗掉事件。这个过程也称为事件分发。 2. **触摸事件(TouchEvent)**:在安卓中,触摸...
如果在分发过程中,父View组想要处理这个事件而不是让子View处理,它可以在`onInterceptTouchEvent`中返回`true`,表示拦截了事件。如果返回`false`,则事件将继续传递给子View。注意,这个方法只在 ViewGroup 中...
这里的`YourEntryClass`是你应用的主类,通常继承自`starling.display.Sprite`,它会作为舞台的根节点。 接下来,加载资源。Starling使用`Texture`对象来表示图像,你可以通过`TextureAtlas`加载多个图像。在`demo`...
如果这个方法返回`true`,那么事件会被父View拦截,`onTouchEvent`不会被调用,事件由父View处理。 - 如果`onInterceptTouchEvent`返回`false`,事件将传递给子View,并调用子View的`onTouchEvent`。如果子View的`...
6. 父View若决定处理事件或子View未处理事件,它将按照普通View的方式处理;否则,它不处理事件,仅负责事件分发。 7. 当父View在onInterceptTouchEvent中拦截事件,事件将直接由父View处理,而不会再次调用...