Android:检测屏幕左边缘减去100dp



我有3张图片,以300dp, 400dp和500dp的translationX开始。因此,当活动开始时,只有一个是可见的,其他两个在屏幕外(右边缘)。它们在处理程序中运行,每50毫秒将它们向左移动30dp。我需要做的是检测任何图像何时到达屏幕的左边缘减去 100dp,即屏幕外100dp,然后再次将它们设置到右边缘,加上 100dp。

我已经研究了几个小时了,我似乎找不到任何方法来告诉代码屏幕边缘在哪里。我发现了类似的问题,但他们似乎都已经有屏幕边缘存储在一个变量中,并试图用它做一些事情(没有显示他们如何得到这个变量)。

这是我一直在使用,它工作了一段时间,但经过几次后ki爆炸消失(突然只有2将显示,然后1,最后没有)…

public void kiBlastHandler() {
    kiHandler = new Handler();
    kiHandler.postDelayed(kiRunnable, 50);
}
    private Runnable kiRunnable = new Runnable() {
        @Override
        public void run() {
            if (gameRunning) {
                // Ki Blasts
                ImageView kiBlast1 = (ImageView) findViewById(R.id.kiBlast1);
                ImageView kiBlast2 = (ImageView) findViewById(R.id.kiBlast2);
                ImageView kiBlast3 = (ImageView) findViewById(R.id.kiBlast3);
                // Ki blast movement
                kiBlast1.setX(kiBlast1.getX() - currentSpeed);
                kiBlast2.setX(kiBlast2.getX() - currentSpeed);
                kiBlast3.setX(kiBlast3.getX() - currentSpeed);
                // Images for lives
                ImageView imgLives = (ImageView) findViewById(R.id.imgLives);
                if (currentLives == 3) {
                    imgLives.setImageResource(R.drawable.lives_03);
                } else if (currentLives == 2) {
                    imgLives.setImageResource(R.drawable.lives_02);
                } else if (currentLives == 1) {
                    imgLives.setImageResource(R.drawable.lives_01);
                }
                // Ready the vibration for losing life
                Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                // Handle losing lives
                if (kiBlast1.getTranslationX() == -1100) {
                    currentLives = (currentLives - 1);
                    v.vibrate(vibrateLives);
                    kiBlast1.setTranslationX(600);
                }
                if (kiBlast2.getTranslationX() == -1100) {
                    currentLives = (currentLives - 1);
                    v.vibrate(vibrateLives);
                    kiBlast2.setTranslationX(600);
                }
                if (kiBlast3.getTranslationX() == -1100) {
                    currentLives = (currentLives - 1);
                    v.vibrate(vibrateLives);
                    kiBlast3.setTranslationX(600);
                }
            }
            // No lives left
            if (currentLives == 0) {
                if (gameRunning) {
                    gameRunning = false;
                    gameOver();
                }
            }
            kiHandler.postDelayed(kiRunnable, 50);
        }
    };
有人能帮忙吗?我真的很感激!

感谢@MuhammadBabar的帮助,我能够解决这个问题。我用的是:

if (kiBlast1.getTranslationX() == -1100) {// etc }

当我应该使用getX()函数时:

if (kiBlast1.getX() <= (viewMain.getX() - 100)) {// etc }

,它现在工作完美!我希望这能帮助其他人理解物体的坐标是如何工作的,因为它让我非常困惑!

相关内容

  • 没有找到相关文章

最新更新