我使用淡出动画来退出我的片段并且它正常工作。我现在要做的是使出现片段的背景颜色变为灰色,就像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();
}
};
答案 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之前使用它。就是这样!