Проблемы с анимацией Android в XML - PullRequest
7 голосов
/ 11 февраля 2011

Я пытаюсь использовать среду анимации 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>

И мой старт:

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.

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

* 1016 Дан *

Ответы [ 4 ]

15 голосов
/ 15 февраля 2011

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

<?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>
1 голос
/ 12 октября 2012

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

<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>
1 голос
/ 11 февраля 2011

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

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

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

0 голосов
/ 15 мая 2015

Используйте этот анимационный 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...