我的一个片段上有一个按钮,它位于相对布局中。 它是一个相当大的按钮,当我胖手指时,我得到一个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;
}
请注意,该按钮还使用自定义背景资源。按下按钮时,我启动AsyncTask,背景根据该任务的进度而变化。我不确定这是否与此问题有关。
编辑:我一直沿着View层次结构走到ViewRootImpl,但是在它上面调用requestDisallowInterceptTouchEvent()仍然没有运气。奇怪的是,当我的按钮粘住时,这会在日志中显示:08-26 11:06:15.287:D / ViewRootImpl(5428):[ViewRootImpl]动作取消 - 1,s:31 s(atmel): - 1.0 eccen:1.3333334
很明显,似乎该动作要么在它进入ViewRootImpl之前被取消,要么就在它之后被取消。这怎么可能呢?
更新:这个......还没有任何进展吗?
更新2:我认为这可能是设备相关的问题。我正在使用Galaxy S4
答案 0 :(得分:3)
这似乎与Galaxy S4的设备相关问题,我无法在其他设备上重现它。如果选择了MotionEvent.ACTION_CANCEL
,我最终会取消任务。