Проблемы с анимацией Android Android

Я пытаюсь использовать анимационную инфраструктуру Android, чтобы мой ImageView перемещался по алмазному узору. Вот мой animation.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> <translate android:fromXDelta="40%p" android:toXDelta="90%p" android:fromYDelta="10%p" android:toYDelta="40%p" android:duration="500" android:startOffset="0"/> <translate android:fromXDelta="90%p" android:toXDelta="40%p" android:fromYDelta="40%p" android:toYDelta="90%p" android:duration="500" android:startOffset="500"/> <translate android:fromXDelta="40%p" android:toXDelta="10%p" android:fromYDelta="90%p" android:toYDelta="40%p" android:duration="500" android:startOffset="1000"/> <translate android:fromXDelta="10%p" android:toXDelta="40%p" android:fromYDelta="40%p" android:toYDelta="10%p" android:duration="500" android:startOffset="1500"/> </set> 

Мой макет:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon"/> </FrameLayout> 

И мой onStart:

 protected void onStart() { super.onStart(); ImageView img = (ImageView)findViewById(R.id.img); Animation a = AnimationUtils.loadAnimation(this, R.anim.diamond); img.startAnimation(a); } 

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

Я бы предпочел использовать XML для определения анимации, а не Java.

Кто-нибудь знает, как я могу видеть всю анимацию?

Дан

Solutions Collecting From Web of "Проблемы с анимацией Android Android"

Атрибуты анимации относятся к тому, где они находятся, когда они начинаются. Это, вероятно, намного ближе к тому, что вы хотите:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> <translate android:fromXDelta="40%p" android:toXDelta="90%p" android:fromYDelta="10%p" android:toYDelta="40%p" android:duration="500" android:startOffset="0"/> <translate android:fromXDelta="0%p" android:toXDelta="-50%p" android:fromYDelta="0%p" android:toYDelta="50%p" android:duration="500" android:startOffset="500"/> <translate android:fromXDelta="0%p" android:toXDelta="-30%p" android:fromYDelta="0%p" android:toYDelta="-50%p" android:duration="500" android:startOffset="1000"/> <translate android:fromXDelta="0%p" android:toXDelta="30%p" android:fromYDelta="0%p" android:toYDelta="-30%p" android:duration="500" android:startOffset="1500"/> </set> 

Попробуй это:

 Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.diamond); findViewById(R.id.img).setAnimation(anim); anim.start(); 

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

Используйте animationListener следующим образом:

 anim.setAnimationListener(new Animation.AnimationListener() { public void onAnimationStart(Animation animation) { } public void onAnimationEnd(Animation animation) { Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.diamond2); findViewById(R.id.img).setAnimation(anim); anim.start(); } public void onAnimationRepeat(Animation animation) { } }); 

Используйте это, он работает, я проверил его

 <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> <translate android:fromXDelta="40%p" android:toXDelta="90%p" android:fromYDelta="10%p" android:toYDelta="40%p" android:duration="500" android:startOffset="0" /> <translate android:fromXDelta="0%p" android:toXDelta="-40%p" android:fromYDelta="0%p" android:toYDelta="40%p" android:duration="500" android:startOffset="500"/> <translate android:fromXDelta="0%p" android:toXDelta="-40%p" android:fromYDelta="0%p" android:toYDelta="-40%p" android:duration="500" android:startOffset="1000"/> <translate android:fromXDelta="0%p" android:toXDelta="40%p" android:fromYDelta="0%p" android:toYDelta="-40%p" android:duration="500" android:startOffset="1500"/> </set> 

Используйте этот анимационный код xml. Оно работает:

 <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> <translate android:fromXDelta="40%" android:toXDelta="90%" android:fromYDelta="10%" android:toYDelta="40%" android:duration="500" android:startOffset="0"/> <translate android:fromXDelta="90%" android:toXDelta="40%" android:fromYDelta="40%" android:toYDelta="90%" android:duration="500" android:startOffset="500"/> <translate android:fromXDelta="40%" android:toXDelta="10%" android:fromYDelta="90%" android:toYDelta="40%" android:duration="500" android:startOffset="1000"/> <translate android:fromXDelta="10%" android:toXDelta="40%" android:fromYDelta="40%" android:toYDelta="10%" android:duration="500" android:startOffset="1500"/> </set>