动画后的Android视图可见性

时间:2018-01-25 19:35:53

标签: android xml animation

我有2个简单的动画, fade_in.xml fade_out.xml 。单击登录按钮时,我希望登录表单不可见。我希望在请求完成后可以看到它。第一部分按照我的预期工作,但是当请求完成时,在动画工作之前,登录表单是不可见的。

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromAlpha="0.0"
android:toAlpha="1.0" />

这是淡入淡出xml是

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromAlpha="1.0"
android:toAlpha="0.0" />

我的动画方法是

void animateStart() {
    Animation animationFadeOut;
    animationFadeOut = AnimationUtils.loadAnimation(context, R.anim.fade_out);
    animationFadeOut.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationEnd(Animation animation) {
            formLayout.setVisibility(View.GONE);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });
    formLayout.startAnimation(animationFadeOut);
}

void animateFinish() {
    Animation animationFadeIn;
    animationFadeIn = AnimationUtils.loadAnimation(context, R.anim.fade_in);
    animationFadeIn.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationEnd(Animation animation) {
            formLayout.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });
    formLayout.startAnimation(animationFadeIn);
}

我的表单为xml

<LinearLayout
    android:id="@+id/container_login_form"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:animateLayoutChanges="true"
    android:layout_centerVertical="true"
    android:orientation="horizontal">..</LinearLayout>

和屏幕 login screen

我该如何解决?

1 个答案:

答案 0 :(得分:0)

删除动画侦听器并将setFillAfter(true)添加到您的动画中

void animateStart() {
    Animation animationFadeOut;
    animationFadeOut = AnimationUtils.loadAnimation(context, R.anim.fade_out);
    animationFadeOut.setFillAfter(true);
    formLayout.startAnimation(animationFadeOut);
}

void animateFinish() {
    Animation animationFadeIn;
    animationFadeIn = AnimationUtils.loadAnimation(context, R.anim.fade_in);
    animationFadeIn.setFillAfter(true);
    formLayout.startAnimation(animationFadeIn);
}