6

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

例如,当用户按下我有这个代码:

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

但是,只要用户按住按钮,我希望能够继续移动角色。令人惊讶的是,我还没有发现如何在 Android 中做到这一点。是否有某种 onButtonDownLister?

4

4 回答 4

22

您需要使用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;
    }
});
于 2012-11-16T01:54:54.400 回答
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;
    }
});
于 2017-04-18T21:32:24.880 回答
0

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

于 2012-11-16T01:55:16.953 回答
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;

            }           
        });
于 2012-11-16T01:57:35.483 回答