淡化动画闪烁 - Android

时间:2012-02-14 22:33:48

标签: android animation android-layout android-animation

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

我设法让它工作,但在两个动画结束时,第一个布局闪烁一次。 我该如何解决?

这是代码(第一个布局名为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>

编辑:如果我使用其他类型的动画(淡出,滑动等等),它可以正常工作,而不会轻弹。

谢谢!

3 个答案:

答案 0 :(得分:1)

尝试使用 setAlpha 功能,而不是设置视图的可见性。

registerLayout.setAlpha(0f); //invisible

registerLayout.setAlpha(1f); //visible

答案 1 :(得分:0)

onAnimationEnd中删除declerations和initilizations,启动可能需要很长时间,因为需要从资源中解析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);

答案 2 :(得分:0)

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