【问题标题】:Detecting hover/swipe over a button检测悬停/滑动按钮
【发布时间】:2017-01-14 01:47:18
【问题描述】:

我希望为 Android 创建一个简单的游戏,其中将向玩家显示一个按钮表。他应该能够在某些按钮上滑动/拖动手指,并且只有在他停止触摸屏幕后才会显示他的移动结果。

我可以看到何时调用 Action_UP 和 Action_Down,但我无法使用 Action_HOVER_MOVE:

View.OnTouchListener OTL = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {           

        if (motionEvent.getAction()==MotionEvent.ACTION_DOWN
                || motionEvent.getAction()==MotionEvent.ACTION_HOVER_MOVE)

        {
            Button B = (Button)view;
            if (B.isActivated())
            {
                String letter = B.getText()+"";
                word+=letter;
            }
            B.setActivated(false);
            Toast t = Toast.makeText(MainActivity.this,word,Toast.LENGTH_SHORT);
            t.show();

        }
        if (motionEvent.getAction()==MotionEvent.ACTION_UP)
        {
           Toast t = Toast.makeText(MainActivity.this,word,Toast.LENGTH_SHORT);
            t.show();
            word="";
            resetButtons();
        }

        return true;
    }
};

如何检测在其他按钮上的滑动?

【问题讨论】:

  • 对于那些对为什么 ACTION_HOVER_MOVE 不起作用感到困惑的人来说,这是一个很好的问题,这对于习惯于鼠标事件的人来说可能并不明显。

标签: java android motionevent


【解决方案1】:

根据文档,您可能需要 ACTION_MOVE

int ACTION_MOVE
getActionMasked() 的常量:在按下手势期间发生了变化(在 ACTION_DOWN 和 ACTION_UP 之间)。运动包含最近的点,以及自上次向下或移动事件以来的任何中间点。

您在使用 ACTION_HOVER_MOVE 时遇到问题,因为:

int ACTION_HOVER_MOVE
getActionMasked() 的常量:发生了变化,但指针未向下(与 ACTION_MOVE 不同)。运动包含最近的点,以及自上次悬停移动事件以来的任何中间点。

这个动作总是传递给指针下的窗口或视图。

这个动作不是一个触摸事件,所以它被传递给 onGenericMotionEvent(MotionEvent) 而不是 onTouchEvent(MotionEvent)。

来源:https://developer.android.com/reference/android/view/MotionEvent.html#ACTION_MOVE

【讨论】:

    猜你喜欢
    • 2017-12-14
    • 2011-12-31
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 2012-11-04
    • 2016-01-15
    • 1970-01-01
    • 2013-10-12
    相关资源
    最近更新 更多