1. 程式人生 > >Activity轉場動畫遇到的問題

Activity轉場動畫遇到的問題

前言

對於Activity的轉場動畫,Google官方也提供了相應的Api,供開發者簡單實現Activity之間切換的動畫效果.新增動畫效果也不難,但是最近開發中新增的切換動畫效果卻都不生效,究其一般之後是解決了,但想想也需要做個小總結,對於這些常用點的細節得把握好,那怎能少了總結記錄.

Ⅰ. Activity轉場動畫(overridePendingTransition)

下面這個Api是經常用來實現Activity之間切換的動畫效果的,對其應該都不陌生。

overridePendingTransition(enterAnim, exitAnim);

在最近的開發中,我就是用這個Api來實現Activity間動畫切換的效果,但是卻不生效,下面是主要的實現程式碼.執行之後,切換動畫效果卻都不生效.

//啟動Activity
public void onStartActivity(){

    Intent intent = new Intent(getActivity(),UpgradeActivity.class);
    mActivity.overridePendingTransition(R.anim.activity_zoom_enter_in,                                 R.anim.activity_zoom_exit_out);
    mActivity.startActivity(intent);
}
public void onCancel(View v) {
        UpgradeActivity.this
.overridePendingTransition(R.anim.activity_zoom_enter_in,R.anim.activity_zoom_exit_out); finish(); } @Override public void onBackPressed() { super.onBackPressed(); UpgradeActivity.this.overridePendingTransition (R.anim.activity_zoom_enter_in,R.anim.activity_zoom_exit_out);
}

對照了之前寫過的 overridePendingTransition 切換程式碼,原來overridePendingTransition 這個Api,還是有些細節得注意:

  • 1、必須在 StartActivity() 或 finish() 之後立即呼叫;
  • 2、而且在 2.1 以上版本有效;
  • 3、手機設定-顯示-動畫,要開啟狀態.

到這裡,應該知道上面的動畫為什麼不生效咯,是提前呼叫了 overridePendingTransition.

Ⅱ. Activity轉場動畫(ActivityOptions)

實現Activity之間的動畫切換效果的方式有很多種,V4包裡有 ActivityOptionsCompat 這個類,同樣可以用其實現,下面是這個類裡主要的靜態方法.

ActivityOptionsCompat.makeSceneTransitionAnimation();
ActivityOptionsCompat.makeThumbnailScaleUpAnimation()
ActivityOptionsCompat.makeCustomAnimation()
ActivityOptionsCompat.makeScaleUpAnimation()
ActivityOptionsCompat.makeClipRevealAnimation()

在使用這個類的過程中還是遇到點問題,關閉頁面的時候,呼叫ActivityCompat.finishAfterTransition方法,並沒有動畫切換的效果,可能跟系統版本這些有問題吧,畢竟ActivityOptions類的出現就是為了相容Activity之間的轉場動畫,那麼也沒繼續去探討了,結束的時候用overridePendingTransition進行操作關閉,下面是大致的實現程式碼:

//啟動Activity
public void onStartActivity(){

    Intent intent = new Intent(getActivity(), UpgradeActivity.class);      
    ActivityOptionsCompat compat = ActivityOptionsCompat.makeCustomAnimation(mActivity,R.anim.activity_zoom_enter_in, R.anim.activity_zoom_exit_out);
    ActivityCompat.startActivity(mActivity,intent,compat.toBundle());

}
public void onCancel(View view){
    //ActivityCompat.finishAfterTransition(this);
    finish();
    UpgradeActivity.this.overridePendingTransition(R.anim.activity_zoom_enter_in,R.anim.activity_zoom_exit_out);        
}

@Override
public void onBackPressed() {
       super.onBackPressed();           
    //ActivityCompat.finishAfterTransition(this);
    UpgradeActivity.this.overridePendingTransition  (R.anim.activity_zoom_enter_in,R.anim.activity_zoom_exit_out);
}

Ⅲ. 寫寫總結,煩躁的心才能夠靜下來