代码之家  ›  专栏  ›  技术社区  ›  Scott Johansen

在Android中连续交叉衰减两个视图

  •  1
  • Scott Johansen  · 技术社区  · 6 年前

    我已经使用类构建了一个Alpha动画,它连续地交叉衰减两个图像 Animation .

    每个图像都会淡入淡出。动画结束后,它会自行重置并重新启动:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Emre Aktürk    6 年前

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

    我建议您使用 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);