我的一个片段上有一个按钮,位于相对布局内。这是一个相当大的按钮,当我粗手指它时,我得到一个 ACTION_CANCEL 动作事件而不是 ACTION_DOWN (它在指尖上工作得很好)。这可以防止它注册后续的 ACTION_UP (我假设视图的父级正在接管)。我尝试在父级上使用 requestDisallowInterceptTouchEvent() 方法,但无济于事。
这是我的 onTouch 实现:
@Override
public boolean onTouch(View view, MotionEvent event) {
//debugging
Log.v("TOUCH EVENT", event.toString());
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
mButton.getParent().requestDisallowInterceptTouchEvent(true);
//Do stuff...
return true;
} else if (action == MotionEvent.ACTION_UP) {
//Do other stuff...
return true;
} else if (action == MotionEvent.ACTION_CANCEL){
return false;
//Toast.makeText(context, "Your thumb is too fat.", Toast.LENGTH_SHORT).show();
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
请注意,该按钮还使用自定义背景资源。当按下按钮时,我启动一个 AsyncTask,并且背景根据该任务的进度而变化。我不确定这是否与问题有关。
编辑:我沿着视图层次结构一直走到 ViewRootImpl,但在调用 requestDisallowInterceptTouchEvent() 时仍然没有运气。奇怪的是,当我的按钮粘住时,日志中会显示以下内容:
08-26 11:06:15.287:D / ViewRootImpl(5428):[ViewRootImpl]操作取消 - …