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

时间:2014-08-25 18:25:20

标签: 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;
}

请注意,该按钮还使用自定义背景资源。按下按钮时,我启动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

1 个答案:

答案 0 :(得分:3)

这似乎与Galaxy S4的设备相关问题,我无法在其他设备上重现它。如果选择了MotionEvent.ACTION_CANCEL,我最终会取消任务。