安卓:如何知道按钮是否被按住

7
我正在Android上玩游戏,我有一个函数MoveCharacter(int direction),当按下按钮时移动动画精灵。
例如,当用户按上键时,我有以下代码:
 mControls.UpButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mLevel.mCharAnimation.FrameUp();
            }           
        });

然而,只要用户一直按住按钮,我希望能够继续移动角色。令人惊讶的是,我在Android中没有找到如何实现这一点的方法。是否有一种onButtonDownLister?
4个回答

24

您需要使用OnTouchListener来实现按下、抬起和其他状态的不同操作。

mControls.UpButton.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            // Do something
            return true;
        case MotionEvent.ACTION_UP:
            // No longer down
            return true;
        }
        return false;
    }
});

1
这真的没有回答问题。如果用户将手指从按钮上滑开,ACTION_UP 永远不会被调用。 - quemeful
9
@quemeful,如果您发布了一个真正回答问题的解决方案,那将是很好的。由于您的评论实际上引导我测试该场景,我发现正确的答案也是测试 MotionEvent.ACTION_CANCEL 并执行与 action_up 相同的操作。 - Gary Bak

4
如Gary Bak在评论中提到的那样,您需要检测用户是否将手指拖出按钮区域。
mButton.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // Pressed down
                return true;
            case MotionEvent.ACTION_UP:
                // Released
                return true;
            case MotionEvent.ACTION_CANCEL:
                // Released - Dragged finger outside
                return true;
        }
        return false;
    }
});

0
您可以使用OnTouchListener代替。
mControls.UpButton.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_DOWN:
                    mLevel.mCharAnimation.FrameUp();
                    break;
                case MotionEvent.ACTION_UP:
                    // User released the button, do your stuff here
                    break;
                }
                return false;

            }           
        });

0

你需要onTouchListener()。基本上,这将允许你看到对象何时被触摸,查看用户如何移动手指,并知道何时松开。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接