在Android中不断交叉淡化两个视图

时间:2018-02-19 17:36:10

标签: android android-animation

我已经使用类Animation连续构建了一个交叉渐放两个图像的Alpha动画。

每张图片都会淡入淡出。当动画结束时,它会重置并重新启动:

anim.setAnimationListener(new Animation.AnimationListener(){
    @Override
    public void onAnimationEnd(Animation arg0) {
        arg0.reset();
        arg0.startNow();
    }
});

另一个图像使用完全相同的动画,但它会以延迟启动。因此,image1淡入,不断显示,然后随着它逐渐淡出,image2淡入,不断显示,然后随着它逐渐淡出,image1再次淡入等等。

anim.setStartTime(AnimationUtils.currentAnimationTimeMillis() + DELAY);
view.setAnimation(anim);

如果应用程序在没有用户干扰的情况下运行,它似乎会慢慢失去同步。当应用暂停,然后恢复时,动画完全不同步。我认为原因是因为它创建了没有同步的单独线程。

是否有一种简单的方法可以以同步的方式完成它?

动画XML看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
    android:fromAlpha="0.0"
    android:toAlpha="1.0"
    android:duration="1000"
    android:startOffset="0"/>
<alpha
    android:fromAlpha="1.0"
    android:toAlpha="0"
    android:duration="2000"
    android:startOffset="2000"/>
</set>

1 个答案:

答案 0 :(得分:1)

当应用程序处于前台时,问题是启动动画的过程时间使其不同步。

我建议您使用ViewFlipper.您可能需要在活动或片段中开始和停止翻转onResume和onPause。

<ViewFlipper
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:auto_start="true"
    android:flipInterval="2000">

// YourViewsHere

</ViewFlipper>

您可以设置像;

这样的动画
flipper.SetInAnimation(this, Android.Resource.Animation.FadeIn);
flipper.SetOutAnimation(this, Android.Resource.Animation.FadeOut);