在按下后退按钮时完成动画
finish Animation on Back Button Pressed
我正在通过关注 link 来制作 Fragments 翻译动画:
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>
主要动画代码Activity:
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);
}
}
请帮助我增加这方面的知识。
尝试在内部执行此操作:
public void onBackPressed(){
// do something here and don't write super.onBackPressed()
}
Handler可以作为一个轻量级的定时器使用。关键是动画一activity开始完成就很清晰,所以你必须延迟完成才能完整地看到动画。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
MainActivity.super.onBackPressed();
}
}, getResources().getInteger(android.R.integer.config_mediumAnimTime));
我正在通过关注 link 来制作 Fragments 翻译动画: 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>
主要动画代码Activity:
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);
}
}
请帮助我增加这方面的知识。
尝试在内部执行此操作:
public void onBackPressed(){
// do something here and don't write super.onBackPressed()
}
Handler可以作为一个轻量级的定时器使用。关键是动画一activity开始完成就很清晰,所以你必须延迟完成才能完整地看到动画。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
MainActivity.super.onBackPressed();
}
}, getResources().getInteger(android.R.integer.config_mediumAnimTime));