即使触摸坐标不再位于小部件内,我如何维护小部件处理的ontouch事件,在android中

时间:2011-07-23 23:31:08

标签: android ontouchevent ontouchlistener

对不起这个复杂的问题让我解释一下。 我已经创建了一个处理一些ontouch事件的自定义小部件。我想要做的是当我在该自定义小部件(onDown)上启动触摸事件时,我希望该小部件继续处理这些事件,即使绝对协调不在该小部件中。

我有一个滚动视图,并且在滚动视图内部(滚动视图内)处理(左 - 右)滚动的小部件。但是如果我垂直移动手指,则触摸事件将由scollview消耗和处理。如果我在自定义小部件中启动ontouchEvent,有没有办法绕过scrollview来处理触摸事件,或者更好地强制自定义小部件继续处理touchEvent?

更新我遇到了http://groups.google.com/group/android-framework/browse_thread/thread/2cdd4269dfb2772e?pli=1

如果自定义窗口小部件不在像“ScrollView”这样的滚动视图中,那么这适用于我的情况。试图解决“滚动对象内的Beeing。如何不将这些问题发送给父级?返回true并不能解决问题

2 个答案:

答案 0 :(得分:8)

在小部件的onTouch处理程序中(例如在ACTION_MOVE期间),调用parent.requestDisallowInterceptTouchEvent(true)。该方法基本上是要求父级(在您的情况下为scrollview)及其祖先不要拦截触摸事件。

答案 1 :(得分:1)

您需要实现ScrollView的一个特殊子类,它允许您的窗口小部件告诉它在需要时禁用滚动(因此它不会在足够移动后开始滚动并从窗口小部件中获取事件)。自定义ScrollView可以覆盖此方法:

http://developer.android.com/reference/android/widget/ScrollView.html#onInterceptTouchEvent(android.view.MotionEvent

如果您不希望基类使用滚动的触摸事件,请在此处返回false,而不是调用基本实现。