【问题标题】:MotionEvent Action_Up issues on passing event传递事件时出现 MotionEvent Action_Up 问题
【发布时间】:2012-02-15 10:24:49
【问题描述】:

我对我的应用程序有一个顶部(透明)视图。
这应该是长按 5 秒并打开一个菜单。 所以我实现了一个 OnTouchListener 。 像这样:

public boolean onTouch(View v, MotionEvent event)
                {       
                        long downtime = 0;
                        long eventt = 0;


                        boolean returnvalue = false; 

                        switch (event.getAction() & MotionEvent.ACTION_MASK) 
                        {

                        case MotionEvent.ACTION_DOWN:
                             eventt = event.getEventTime();                         
                             returnvalue = true; 
                             break;

                        case MotionEvent.ACTION_UP:

                            downtime = event.getDownTime();
                            if (eventt - downtime > 5000)
                            {
                                Main.changePlayerDialog.show();
                                returnvalue = true;
                            }
                            else
                            { 
                                returnvalue = false;
                                //return false;
                            }
                            break;

                        default: 
                                break;
                       }                

                        return returnvalue;

                    }
                });

现在,对于 5 秒的触摸和释放,这工作得很好。 但是,当它小于 5 时,我返回 false。 然而,MotionEvent 并没有传递给它下面的其他视图! 所以所有按钮和诸如此类的底层视图现在都被“禁用”了......

如果我立即返回 false,一切正常...但是如果触发了基础按钮,则 ACTION_UP 将不再触发。 (似乎合乎逻辑,事件已在其他地方处理)。

我该如何解决这个问题?

【问题讨论】:

    标签: android ontouchlistener motion-detection


    【解决方案1】:

    您是否尝试过返回:

    return super.onTouch(v, event);
    

    ?

    --- 编辑

    好吧,如果你这样做:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
         >
    
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="coucou"
            android:id="@+id/button" />
    
    
        <LinearLayout  android:id="@+id/linear"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
             />
    
    </RelativeLayout>
    

    在线性布局和点击按钮上添加onTouch,按钮永远不会捕捉到事件......

    【讨论】:

    • 我在 android.view.MotionEvent.getEventTime(MotionEvent.java:1389) 收到 StackOverFlowError
    • 嗯,问题是你不能触摸另一个视图下的视图...检查我编辑的消息...
    • 其实可以。如果你在上面传递 false ,它就会被传递下去。就像我说的,如果我直接返回 false,一切都会正常。
    • 好的,但那是因为你让你的孩子有类似“duplicateParentState”的东西?
    • 真的没有。与例如带有按钮的列表视图相同。基本积累。即使我只是在顶部添加一个空白视图,它仍然会通过我的事件。
    猜你喜欢
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多