【问题标题】:Android fragment exit animation not firingAndroid片段退出动画未触发
【发布时间】:2015-07-04 08:45:21
【问题描述】:

我有一个片段在添加时会滑入,而在删除时会从屏幕右侧滑出。但是,只有动画中的滑动起作用,并且当我将片段的可见性设置为消失时,它会在没有滑动的情况下消失。这也是我在这里的第一篇文章,所以如果我做的不对,请告诉我,谢谢!

活动代码

protected void onCreate(Bundle savedInstanceState) {
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.setCustomAnimations(R.animator.slide_in, R.animator.slide_out_right);
        Bundle bundle = new Bundle();
        MyFragment myFrag = new MyFragment();
        myFrag.setArguments(bundle);
        ft.add(R.id.challenger_preview_fragment_container, myFrag, "MyFragment");
        ft.commit();
}


片段代码

public void removeFragment() {
    getView().setVisibility(View.GONE);
}


动画 XML

slide_in

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="1000"
        android:valueTo="0"
        android:valueType="floatType" />
</set>

slide_out_right

<?xml version="1.0" encoding="utf-8" ?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:valueFrom="-1280"
        android:valueTo="0"
        android:valueType="floatType"
        android:propertyName="X"
        android:duration="2000" />
</set>

【问题讨论】:

  • 你找到解决方案了吗?

标签: android android-fragments android-animation


【解决方案1】:

试试下面的代码,在下面创建一个动画对象向右滑出并设置持续时间。稍后创建一个侦听器以了解动画何时结束,以便您可以隐藏视图。

您上面代码中的问题是您在动画结束之前隐藏了视图。

Animation animation = AnimationUtils.loadAnimation(getActivity(),R.animator.slide_out_right);
    animation.setDuration(800);
    animation.setAnimationListener(new AnimationListener() {
        @Override 
        public void onAnimationEnd(Animation animation) {
            try { 
                    getView().setVisibility(View.GONE);
            } catch (Exception e) {
                e.printStackTrace();
            } 
        } 
    }); 

    //Start the animation.   
    getView().startAnimation(animation);

【讨论】:

    【解决方案2】:

    您正在设置可见性getView().setVisibility(View.GONE);

    所以片段不能再回到它的 GONE

    试试getView().setVisibility(View.INVISIBLE);

    当它返回时,让它再次显示为getView().setVisibility(View.VISIBLE);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2021-05-29
      相关资源
      最近更新 更多