Проблема анимации - PullRequest
       21

Проблема анимации

3 голосов
/ 12 августа 2011

Я пытаюсь настроить простую анимацию, которая берет изображение в верхней правой части экрана, перемещает его в точку 30%, перемещается по кругу, а затем оно перемещается обратно к краю.Смотрите рисунок ниже.Однако текущий скрипт делает странные вещи, и хотя он оказывается в нужном месте, почти ничего не кажется правильным до этого.Кроме того, в зависимости от версии Android и размера экрана, это может сделать еще более дикие вещи.Любая помощь приветствуется.Спасибо!

enter image description here

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

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:shareInterpolator="true">
    <set>
        <translate
            android:fromXDelta="0%p" android:toXDelta="0%p"
            android:fromYDelta="00%p" android:toYDelta="20%p"
            android:duration="001" android:startOffset="0"/>
        <translate
            android:fromXDelta="0%p" android:toXDelta="-80%p"
            android:fromYDelta="00%p" android:toYDelta="0%p"
            android:duration="2000" android:startOffset="1"/>
    </set>
    <set>
        <rotate 
            android:fromDegrees="180"
            android:toDegrees="0" 
            android:pivotY="20%p"
            android:duration="1000"
            android:startOffset="2000"/>
        <translate
            android:fromXDelta="0%p" android:toXDelta="70%p"
            android:fromYDelta="00%p" android:toYDelta="0%p"
            android:duration="100" 
            android:startOffset="3000"/>
    </set>
</set>

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

Я сделал это в новом проекте Android с кнопкой в ​​основном макете XML.Это сработало.Все проценты имеют родительский размер относительно позиции представления.

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate android:fromXDelta="0%p" android:toXDelta="-80%p"
    android:fromYDelta="0%p" android:toYDelta="0%p" 
    android:duration="2000" />

<rotate android:fromDegrees="0" android:toDegrees="-180"
        android:pivotX="-70%p" android:pivotY="10%p" android:duration="1000"
        android:startOffset="2000" />

<translate  
    android:fromXDelta="0%p" android:toXDelta="80%p"
    android:fromYDelta="0%p" android:toYDelta="0%p" android:duration="2000"
    android:startOffset="3000" />

</set>
0 голосов
/ 25 августа 2011

Я пытался создать анимацию, описанную на вашем рисунке.Я разделил анимацию на 2 файла left_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:shareInterpolator="true">
    <set>
        <translate
            android:fromXDelta="0%p" android:toXDelta="-80%p"
            android:fromYDelta="00%p" android:toYDelta="0%p"
            android:duration="2000" android:startOffset="0"/>
         <translate
            android:fromXDelta="0%p" android:toXDelta="0%p"
            android:fromYDelta="00%p" android:toYDelta="20%p"
            android:duration="2000" android:startOffset="2000"/>         
    </set>
</set>

right.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="-80%p" android:toXDelta="0%p" android:fromYDelta="20%p" 
    android:toYDelta="20%p" android:duration="2000" android:fillAfter="true"/>

И этот код я использовал в упражнении

image = (ImageView)findViewById(R.id.image);

        anim = AnimationUtils.loadAnimation(this, R.anim.left_down);
        goBack = AnimationUtils.loadAnimation(this, R.anim.right);
        anim.setAnimationListener(new AnimationListener() {            
            @Override
            public void onAnimationStart(Animation animation) {}

            @Override
            public void onAnimationRepeat(Animation animation) {}

            @Override
            public void onAnimationEnd(Animation animation) {
                image.startAnimation(goBack);    
            }
        });
image.startAnimation(anim);
...