1

Здравствуйте, я много раз искал много времени, чтобы динамически устанавливать местоположение x и y ImageView при щелчке по изображению во время анимации и коротких замыканий. Мой ImageView начинается с XML и имеет анимацию, которая заставляет ImageView падать в нижней части экрана.Android Reset ImageView Расположение динамически При нажатии на ImageView, который использует анимацию

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

У меня есть анимации как таковой:

ViewPropertyAnimator viewPropertyAnimator = myImageView.animate() 
    .translationY(bottomOfScreen) 
    .setInterpolator(new AccelerateInterpolator()) 
    .setInterpolator(new BounceInterpolator()) 
    .setDuration(1000); 

У меня есть множество х и у, как это внутри onClickListener для myImageView:

myImageView.setOnClickListener(new View.OnClickListener() { 
    Random randomX = new Random(); 
    myImageView.setX(randomX.nextInt(500 - 0 + 1) + 0); 
    myImageView.setY(-300); 
} 

Х похоже на работу размещения ImageView в любом месте x я хочу. Однако, похоже, из-за появления анимации (отбрасывание ImageView в нижней части макета), когда вы нажимаете на ImageView, y всегда устанавливается в положение, где оно было нажато.

Любые указатели в правильном направлении. Спасибо.

ответ

0

Прежде всего, некоторые вещи не имеют смысла в вашем коде. Эта линия:

myImageView.setX(randomX.nextInt(500 - 0 + 1) + 0); 

сбивает с толку и может быть упрощено до

myImageView.setX(randomX.nextInt(500 + 1)); 

и эта линия:

myImageView.setY(-300); 

означает, что вы размещаете ImageView -300 оси у, которая находится вне экрана. Помните, что y = 0 является верхней частью экрана. Также он выглядит нераскрытым, когда вы просто устанавливаетеX и setY. Взгляды исчезают и появляются где-то в другом месте. Почему бы вам не попробовать что-то вроде этого:

myImageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Random randomX = new Random(); 

      myImageView.animate() 
        .translationX(randomX.nextInt(500 + 1)) 
        .translationY(myImageView.getHeight()) 
        .setInterpolator(new AccelerateDecelerateInterpolator()) 
        .setDuration(500) 
        .setListener(new Animator.AnimatorListener() { 
         @Override 
         public void onAnimationStart(Animator animation) { 

         } 

         @Override 
         public void onAnimationEnd(Animator animation) { 
          myImageView.animate() 
            .translationY(bottomOfScreen) 
            .setInterpolator(new AccelerateInterpolator()) 
            .setInterpolator(new BounceInterpolator()) 
            .setDuration(1000); 
         } 

         @Override 
         public void onAnimationCancel(Animator animation) { 

         } 

         @Override 
         public void onAnimationRepeat(Animator animation) { 

         } 
        }); 
     } 
    }); 

Это оживляет вид сзади на верхней и ждет, пока анимация не завершится благодаря AnimatorListener, а затем позволяет ей упасть еще раз, когда onAnimationEnd() называется.

+0

У меня первоначально было 0 для Y, однако, когда я увидел, что он не попал в верхнюю часть, хотя я бы положил отрицательное число, это повысилось бы независимо. – L1ghtk3ira

+0

Спасибо, работы. И есть много хороших классов и таких, чтобы я мог заглянуть. Работа лада. :) – L1ghtk3ira