Я создаю приложение, и мне нужно анимировать элемент 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);
}
Спасибо, Стив, после хорошего сна я подумал, что это не самая умная вещь, чтобы добавить к обратному вызову :) Кроме того, пришлось установить setFillAfter в true, чтобы сохранить анимированные элементы на месте. Странно, но я не могу оживить этот элемент до его первоначального места, когда я вызываю метод animate методом backPressed. Есть идеи? – undroid