淡入淡出动画闪烁 - Android

3

我正在尝试设置两个布局 - 我想要一个布局向上滑动,当它完成后另一个布局应该淡入。

我已经成功地让它工作了,但在两个动画结束时,第一个布局会闪烁一次。如何解决这个问题?

以下是代码(第一个布局名为titleLay,第二个布局名为registerLayout)-

final TranslateAnimation slide = new TranslateAnimation(0, 0, 0,-100 ); 
slide.setDuration(500); 
slide.setFillAfter(true); 
slide.setAnimationListener(new AnimationListener() {

@Override
public void onAnimationStart(Animation animation) {


}

@Override
public void onAnimationRepeat(Animation animation) {

}

@Override
public void onAnimationEnd(Animation animation) {
    RelativeLayout registerLayout  = (RelativeLayout) findViewById(R.id.registerLay);
    Animation fadeInAnimation = AnimationUtils.loadAnimation(con, R.anim.fade_in_anim);
    registerLayout.startAnimation(fadeInAnimation);
    registerLayout.setVisibility(View.VISIBLE);
}
});

titleLay.startAnimation(slide);

这是 R.anim.fade_in_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:interpolator="@android:anim/accelerate_interpolator" 
    android:duration="500"/>
</set>

编辑:如果我使用其他类型的动画(淡出,滑动等),它可以正常工作,没有闪烁。
谢谢!

Tofira,你解决了这个问题吗?我也遇到了同样的问题,想知道你是如何克服这个问题的? - Byron
3个回答

2

如果您在布局文件中使用animateLayoutChanges,并与animation onAnimationEnd切换View可见性,则会导致两个动画运行,视图闪烁或闪烁。设置视图可见性会导致布局animateLayoutChanges运行并使视图淡入一次,然后您创建的动画也会导致第二个动画运行。


1

不要设置视图的可见性,尝试使用setAlpha函数。

registerLayout.setAlpha(0f); //invisible

registerLayout.setAlpha(1f); //visible

0
从你的onAnimationEnd中删除声明和初始化,因为初始化可能需要很长时间,因为XML需要从资源中解析。
将这两行代码放在你的onCreate中:
 RelativeLayout registerLayout  = (RelativeLayout) findViewById(R.id.registerLay);
 Animation fadeInAnimation = AnimationUtils.loadAnimation(con, R.anim.fade_in_anim);

并将可见性设置为幻灯片:

    final TranslateAnimation slide = new TranslateAnimation(0, 0, 0,-100 ); 
         slide.setDuration(500); 
         slide.setFillAfter(true);
         slide.setAnimationListener(new

 AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {


            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {

                registerLayout.startAnimation(fadeInAnimation);
                registerLayout.setVisibility(View.VISIBLE);
            }
            });

            titleLay.startAnimation(slide);
            titleLay.setVisibilty(View.VISIBLE);

我实际上已经删除了声明(只是为了在此处发布时使代码更清晰而添加了它们),但这并没有帮助。当我删除“slide.setFillAfter(true);”行时,titleLay返回到其原始位置(在滑动动画之前),因此它也不起作用。 - Tofira
我该如何设置动画的可见性? - Tofira
翻译:抱歉 :)... 我的意思是另一种布局,也就是您应用动画的那个布局。 - Rotemmiz
我很感激所有的帮助,但它也没有起到帮助的作用。 - Tofira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接