Android:如何知道按钮是否被按下

时间:2012-11-16 01:53:08

标签: android button user-interface callback

我在Android上玩游戏,我有一个函数MoveCharacter(int direction),在按下按钮时移动动画精灵

例如,当用户按下时,我有以下代码:

 mControls.UpButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mLevel.mCharAnimation.FrameUp();
            }           
        });

但是,只要用户按下按钮,我就能继续移动角色。 令人惊讶的是,我还没有发现如何在Android中执行此操作。 是否有某种onButtonDownLister?

4 个答案:

答案 0 :(得分:19)

您需要使用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 :(得分:1)

正如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;
    }
});

答案 2 :(得分:0)

你想要onTouchListener()。基本上,这将允许您查看触摸对象的时间,查看用户如何移动他们的手指,并知道何时放手。

答案 3 :(得分: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;

            }           
        });