8
我正在使用自定義動畫替換碎片,並且我想在動畫啓動時禁用一些按鈕,然後在動畫結束時啓用。我怎樣才能做到這一點?FragmentTransaction setCustomAnimation回調之前和之後
我正在使用自定義動畫替換碎片,並且我想在動畫啓動時禁用一些按鈕,然後在動畫結束時啓用。我怎樣才能做到這一點?FragmentTransaction setCustomAnimation回調之前和之後
我會建議做一些基類,你所有的Fragments
擴展,並在其中定義一些可以覆蓋處理動畫事件的方法。然後,覆蓋onCreateAnimation()
(假設您正在使用支持庫)在動畫回調中發送事件。例如:
protected void onAnimationStarted() {}
protected void onAnimationEnded() {}
protected void onAnimationRepeated() {}
@Override
public Animation onCreateAnimation (int transit, boolean enter, int nextAnim) {
//Check if the superclass already created the animation
Animation anim = super.onCreateAnimation(transit, enter, nextAnim);
//If not, and an animation is defined, load it now
if (anim == null && nextAnim != 0) {
anim = AnimationUtils.loadAnimation(getActivity(), nextAnim);
}
//If there is an animation for this fragment, add a listener.
if (anim != null) {
anim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart (Animation animation) {
onAnimationStarted();
}
@Override
public void onAnimationEnd (Animation animation) {
onAnimationEnded();
}
@Override
public void onAnimationRepeat (Animation animation) {
onAnimationRepeated();
}
});
}
return anim;
}
然後,你Fragment
子類,只是重寫onAnimationStarted()
以禁用按鈕,並onAnimationEnded()
啓用按鈕。
這不適用於像Slide或Explode這樣的材質轉換,因爲anim始終爲空。 – Servus7