Fade animation blinks - Android

我与影子孤独终老i 提交于 2020-01-24 12:50:06

问题


I'm trying to set up 2 layouts - I want one layout to slide up, and when it's finished another layout should fade in.

I've managed to get it working, but at the end of the two animation and first layout blinks once. How can I solve it?

Here's the code(first layout is named titleLay and the second one is called 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);

And that's the XML code of the R.anim.fade_in_anim-

<?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>

Edit: If I use other types of animations(fade out, slide etc...) it works fine, without flicking.

Thanks!


回答1:


Instead of setting the view's visibility, try to use the setAlpha function.

registerLayout.setAlpha(0f); //invisible

registerLayout.setAlpha(1f); //visible



回答2:


Remove the declerations and initilizations from your onAnimationEnd, the initilization may take a long time since the XML needs to be parsed from resources,

put thouse two lines in your onCreate:

 RelativeLayout registerLayout  = (RelativeLayout) findViewById(R.id.registerLay);
 Animation fadeInAnimation = AnimationUtils.loadAnimation(con, R.anim.fade_in_anim);

and set visibility to slide:

    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);


来源:https://stackoverflow.com/questions/9285220/fade-animation-blinks-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!