按下后退按钮完成动画

时间:2015-10-09 12:25:20

标签: android android-fragments android-animation

我正在通过以下链接处理片段翻译动画: http://trickyandroid.com/fragments-translate-animation/

但我想通过按后退按钮开始向下滑动动画,而不是按动作栏按钮完成向上滑动动画。

Slide_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="yFraction"
            android:valueType="floatType"
            android:valueFrom="0.58"
            android:valueTo="1.0"
            android:duration="@android:integer/config_mediumAnimTime"/>
    <objectAnimator
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="alpha"
            android:valueType="floatType"
            android:valueFrom="1"
            android:valueTo="0"
            android:duration="@android:integer/config_mediumAnimTime"/>
</set>

Slide.up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="yFraction"
            android:valueType="floatType"
            android:valueFrom="1.0"
            android:valueTo="0.58"
            android:duration="@android:integer/config_mediumAnimTime"/>
    <objectAnimator
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="alpha"
            android:valueType="floatType"
            android:valueFrom="0.58"
            android:valueTo="1.0"
            android:duration="@android:integer/config_mediumAnimTime"/>
</set>

主要活动中的动画代码:

 Fragment f = getFragmentManager().findFragmentByTag(LIST_FRAGMENT_TAG);



        if (f != null) {
            getFragmentManager().popBackStack();
        } else {
            getFragmentManager().beginTransaction()
                    .setCustomAnimations(R.anim.slide_up,
                            R.anim.slide_down,
                            R.anim.slide_up,
                            R.anim.slide_down)
            .add(R.id.list_fragment_container, SlidingListFragment
                            .instantiate(this, SlidingListFragment.class.getName()),
                    LIST_FRAGMENT_TAG
            )
               .addToBackStack(null) .commit();

            googleMap.getUiSettings().setAllGesturesEnabled(false);
            }


        }

请帮助我增加对此的了解。

2 个答案:

答案 0 :(得分:0)

尝试在内部执行此操作:

public void onBackPressed(){
     // do something here and don't write super.onBackPressed()
}

答案 1 :(得分:0)

处理程序可用作轻量级计时器。关键是一旦活动开始执行完成就会清除动画,所以你必须延迟完成才能完全看到动画。

  new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            MainActivity.super.onBackPressed();
        }
    }, getResources().getInteger(android.R.integer.config_mediumAnimTime));