java - 当按住按钮时,如何使 ImageView 在屏幕上不断移动?

标签 java android button imageview

我到处寻找这个问题的答案,但找不到任何有效的答案。

对于我的大学作业,我需要在 Android Studio 中创建一个冒险游戏。我希望当我单击向下并按住箭头按钮(因此在给定向上按钮的情况下)时,ImageView(播放器)将不断在屏幕上移动,直到我释放按钮。我尝试过使用 ACTION_UP 和 ACTION_DOWN 的 OnTouchListeners 和鼠标事件,这可以工作,但不符合我的需要,因为单击时它仍然只移动一步。

        ImageView IV_player;
        Button ButtonUp;

        IV_player = (ImageView) findViewById(R.id.IV_player); 
        ButtonUp = (Button) findViewById(R.id.ButtonUp);       

        ButtonUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            IV_player.setY(IV_player.getY() - 32);

        }
    });

最佳答案

将触摸监听器视为状态机。当 ACTION_DOWN 事件发生时,开始执行您想做的任何操作。当 ACTION_UP/ACTION_CANCEL 事件发生时,停止您的操作。那么您如何实现呢?

您的州旗可以是一个简单的 boolean 值:

boolean shouldCharacterMove = false;

定义 View 的触摸监听器。

ButtonUp.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getActionMasked()) {
                case MotionEvent.ACTION_DOWN:
                    setShouldCharacterMove(true);
                    break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                    setShouldCharacterMove(false);
                    break;
            }
            return true;
        }
});

在定义setShouldCharacterMove之前,我们需要找出一种移动项目的方法。我们可以通过 X 毫秒后运行的 Runnable 来完成此操作。

private final Runnable characterMoveRunnable = new Runnable() {
    @Override
    public void run() {
        float y = IV_player.getTranslationY();
        IV_player.setTranslationY(y + 5); // Doesn't have to be 5.

        if (shouldCharacterMove) {
            IV_player.postDelayed(this, 16); // 60fps
        }
    }
};

现在我们可以定义setShouldCharacterMove:

void setShouldCharacterMove(boolean shouldMove) {
    shouldCharacterMove = shouldMove;
    IV_player.removeCallbacks(characterMoveRunnable);
    if (shouldMove) {
        IV_player.post(characterMoveRunnable);
    }
}

关于java - 当按住按钮时,如何使 ImageView 在屏幕上不断移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34370706/

相关文章:

java - JPA 等同于 Hibernate org.hibernate.criterion.Example?

android - 尝试更新测试版时出现 Google Play 错误

css - 将按钮文本放在一行

java - 如何使用 bundle 将多维数组列表传递给另一个 Activity

python - 如何在html中制作一个可以触发Python后端函数的按钮?

javascript - jQuery 仅返回 <li> 元素文本

java - Android libgdx如何避免静态方法和枚举

java - KARAF OSGI bundle 上的自定义 hibernate.cfg.xml 位置

java - PDF 到 PCL 转换

android - 调试 native Android 代码