2015-10-13 4 views
1

У меня 3 изображения, которые начинаются с переводаX 300dp, 400dp и 500dp. Таким образом, только один вид отображается, когда начинается действие, а остальные 2 - вне экрана (правый край). Они работают в обработчике, что каждые 50 мс перемещают их на 30dp влево. Что мне нужно сделать, так это обнаружить, когда какое-либо изображение достигло левого края экрана минус 100dp, поэтому 100dp за пределами экрана, затем снова установите их на правый край, plus 100dp.Android: обнаружение левого края экрана минус 100dp

Я работаю в течение нескольких часов, и я не могу найти способ рассказать код, где находится край экрана. Я нашел похожие вопросы, но все они, похоже, уже имеют край экрана, хранящийся в переменной, и пытаются что-то сделать с ним (не показывая, как они получили эту переменную).

Это то, что я использую, который работает в течение некоторого времени, но после того, как несколько проходит ки бластов исчезают (вдруг только 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); 
     } 
    }; 

Может ли кто-нибудь помочь? Я бы очень признателен!

+1

Firs вам нужно преобразовать 100dp в пиксель, а затем использовать его в вашем прогоне if (imageView.left <= -100) {переместить изображения вправо}! –

+0

Привет @MuhammadBabar, спасибо, что показал мне метод getLeft(). Но это, кажется, возвращает 0. Я попытался использовать ... if (kiBlast1.getTranslationX() <= (viewMain.getLeft() - 100)) {// move right}. ViewMain - это мое представление RelativeLayout верхнего уровня, которое является полноэкранным. viewMain.getLeft() возвращает 0. Я хотел сказать «Если X-позиция 100 слева от отметки 0, а затем переместите вправо». Но код превращается в «viewMain.left() == 0, поэтому переместите kiBlast 100 слева от того места, где он уже есть». Знаете ли вы, что я сделал неправильно? Еще раз спасибо! –

+0

проверьте это http://stackoverflow.com/questions/12052570/getright-getleft-gettop-returning-zero, для чего getLeft возвращает 0. –

ответ

0

Благодаря помощи @MuhammadBabar я смог решить проблему. Я использую:

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

Когда я должен был использовать getX() функцию:

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

и он теперь работает отлично! Надеюсь, это поможет другим понять, как работают координаты объектов, поскольку это меня очень смутило!

Смежные вопросы