MotionEvent.ACTION_CANCEL 阻止了我按钮上的后续 ACTION_UP

Jef*_*nes 5 android android-layout android-fragments

我的一个片段上有一个按钮,位于相对布局内。这是一个相当大的按钮,当我粗手指它时,我得到一个 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]操作取消 - 1,s:31 s(atmel):-1.0 eccen:1.3333334

显然,该操作要么在进入 ViewRootImpl 之前被取消,要么在进入 ViewRootImpl 后立即被取消。这怎么可能?

更新:这方面仍然没有进展......有人吗?

更新 2:我认为这可能是一个设备相关问题。我使用的是 Galaxy S4

Jef*_*nes 4

这似乎是 Galaxy S4 的设备相关问题,我无法在其他设备上重现该问题。MotionEvent.ACTION_CANCEL如果一个被接走,我最终只是取消了任务。