用阴影淡出动画

时间:2017-03-13 14:14:38

标签: android animation fadeout

我使用淡出动画来退出我的片段并且它正常工作。我现在要做的是使出现片段的背景颜色变为灰色,就像AlertDialog的动画一样。这是我的动画文件:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <scale
         android:duration="300"
         android:fromXScale="1.0"
         android:fromYScale="1.0"
         android:pivotX="50%"
         android:pivotY="50%"
         android:toXScale="0.0"
         android:toYScale="0.0" />

    <alpha
         android:duration="300"
         android:fromAlpha="1.0"
         android:interpolator="@android:anim/decelerate_interpolator"
         android:toAlpha="0.0" />

</set>

是否可以更改此文件中的背景颜色,或者我需要在其他地方执行此操作?

这个文件名为center_pop_up_exit,我在用户点击一个监听器的按钮时使用它:

View.OnClickListener noAccountHandler = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        SignUpFragment signUpFragment = new SignUpFragment();
        FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
        fragmentTransaction.setCustomAnimations(R.anim.slide_left_enter, R.anim.center_pop_up_exit, 0, R.anim.center_pop_up_exit);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.replace(R.id.log_in_fragment_container, signUpFragment, "SignUpFragment");
        fragmentTransaction.commit();
    }
};

1 个答案:

答案 0 :(得分:0)

我还没有找到一种方法来在动画xml中完成它。但是,我设法通过使用TransitionDrawable获得了我想要的效果。首先,我创建了一个xml文件:

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- The drawables used here can be solid colors, gradients, shapes, images, etc. -->
    <item android:drawable="@color/transparent" />
    <item android:drawable="@color/transp_black" />
</transition>

之后,我需要将此文件设置为我想要阴影的视图的背景(在我的情况下,这是我的片段的容器):

<FrameLayout
    android:id="@+id/shade"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/transition_drawable"/>

然后我得到视图,获取视图的背景并进行转换:

shadeLayout = postMeasurementsFragment.getView().findViewById(R.id.shade);
TransitionDrawable transitionDrawable = (TransitionDrawable)shadeLayout.getBackground();
transitionDrawable.startTransition(200);

最后,在触发转换后,我可以进行片段交易:

Fragment fragment = new PostMeasurementFragment();
FragmentTransaction fragmentTransaction = ((PostActivity)context).getSupportFragmentManager().beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.setCustomAnimations(R.anim.slide_up_enter,0,0,R.anim.slide_down_exit);
    fragmentTransaction.add(R.id.modal_measurement_container, fragment, "PostMeasurementFragment");
    fragmentTransaction.commit();

加:如果你需要恢复转换,你会再次获得视图和视图的背景并进行另一次转换:

TransitionDrawable transitionDrawable = (TransitionDrawable)shadeLayout.getBackground();
transitionDrawable.reverseTransition(200);

在我的情况下,我在popBackStack之前使用它。就是这样!