Как сделать плавную рамочную анимацию в Android? - PullRequest
5 голосов
/ 04 мая 2011

Я сделал рамочную анимацию.Но переход между изображениями выглядит плохо.Как я могу применить к нему эффект перекрестного затухания?

При использовании TransitionDrawable я получаю правильный результат, но он останавливается после одного выполнения.

У любого есть идея, как решить его?

public void startAnimation() {
    if (logoAnimation != null) {
        if (logoAnimation.isRunning()) {
            logoAnimation.stop();
        }
        logoAnimation.start();
    }
}

private int setLogoAnimation(int animationID, int targetID) {
    imageView = (ImageView) window.findViewById(targetID);
    imageView.setImageResource(animationID);
    logoAnimation = (AnimationDrawable) imageView.getDrawable();

    if (imageView != null && logoAnimation != null) {
        return 1;
    } else {
        return 0;
    }
}

Чем я просто запускаю это object.startAnimation ();Я работаю, но анимация уродливая, и мне нужно, чтобы она была плавной.

Ответы [ 2 ]

7 голосов
/ 04 мая 2011

Если вы хотите плавно переходить между двумя изображениями, почему бы не использовать AlphaAnimation, которая изменит прозрачность двух изображений и создаст требуемый эффект.

Создайте две анимации:

res / anim / fadeout.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:fromAlpha="1.0" android:toAlpha="0.0"
    android:duration="@android:integer/config_mediumAnimTime" />

res / anim / fadein.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:fromAlpha="0.0" android:toAlpha="1.0"
    android:duration="@android:integer/config_mediumAnimTime" />

, а затем переопределить переход по умолчанию между действиями:

startActivity( new Intent( this, SecondActivity.class ) );
overridePendingTransition( R.anim.fadeout, R.anim.fadein );

или вы можете применить анимацию к определенным виджетам:

Animation animation = AnimationUtils.loadAnimation( this, R.anim.fadeout );
image1.startAnimation( animation );

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

0 голосов
/ 04 мая 2011

С помощью кадровой анимации увеличение номера кадра может помочь вам получить хороший результат. В моем случае результат был удовлетворительным на моем HTC Evo.

При использовании анимации движения вы можете использовать линейный интерполятор. Для вращения например

<?xml version="1.0" encoding="UTF-8"?>  
<rotate  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fromDegrees="0"  
    android:toDegrees="359"  
    android:pivotX="50%"  
    android:pivotY="50%"  
    android:repeatCount="infinite"  
    android:duration="1000"  
    android:interpolator="@anim/linear_interpolator" />  

А вы здесь интерполируете содержимое файла

<?xml version="1.0" encoding="utf-8"?>
<linearInterpolator xmlns:android="http://schemas.android.com/apk/res/android" />

Это для вращения, полный список вы можете посмотреть здесь.

http://developer.android.com/guide/topics/resources/animation-resource.html

или вы можете прочитать сообщение в блоге о том, как сделать загрузочную анимацию.

http://yekmer.posterous.com/how-to-make-a-loading-animator-in-android

...