2015-03-04 4 views
0

Я создаю приложение, и мне нужно анимировать элемент imageView. Проблема в том, что в конце анимации элемент получает неожиданное повышение по оси y, а не по определению.Анимация Android ImageView не работает

Я знаю, что в конце процесса анимации анимированный элемент возвращается к своим первоначальным x, y. Я вручную добавил анимированное смещение по методу onAnimationEnd. По какой-то нечетной причине анимированный элемент прыгает примерно на 40 пикселей вверх, и я знаю, что я не добавлял его нигде по ошибке. Что здесь не так?

public class MyActivity extends Activity { 
    private ImageView logo,moto; 
    private int[] imageView_XY; 
    public float logoXpos,logoYpos; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.verification_activity); 
     logo = (ImageView) findViewById(R.id.imageView1); 
     //animates the logo 
     animate(logo,30); 
    } 

    public void animate(final ImageView imageView, int amount){ 
     //gets the current x,y of the widget 
     imageView_XY = new int[2]; 
     imageViewElement.getLocationInWindow(imageView_XY); 
     logoXpos = (int) imageViewElement.getX(); 
     logoYpos = imageView_XY[1]; 
     Log.d("Animation XY: "," current location "+"("+logoXpos+","+logoYpos+")"); //prints out 0,0 
     //animates the widget 100 px up 
     TranslateAnimation anim = new TranslateAnimation(0,0,0,-amount); 
     logoAnim.setDuration(1000); 
     logoAnim.setFillAfter(false); 

     logoAnim.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       Log.d("Animation: ","animation ended"); 
       logoXpos = imageView_XY[0]; 
       logoYpos = imageView_XY[1]; 
       Log.d("Animation ended XY: "," current location "+"("+logoXpos+","+logoYpos+")"); //prints out 0,0 again 
       imageViewElement.setY(logoYpos+30); 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 
       Log.d("Animation: ","animation repeat"); 
      } 
     }); 
     imageViewElement.startAnimation(anim); 
    } 
+0

Спасибо, Стив, после хорошего сна я подумал, что это не самая умная вещь, чтобы добавить к обратному вызову :) Кроме того, пришлось установить setFillAfter в true, чтобы сохранить анимированные элементы на месте. Странно, но я не могу оживить этот элемент до его первоначального места, когда я вызываю метод animate методом backPressed. Есть идеи? – undroid

ответ

0

OK Я получил эту работу. Для будущих гуглеров: Я закончил настройку logoAnim.setFillAfter(false); на true и избавился от ручного сдвига в конце анимации imageViewElement.setY(logoYpos+30);.

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