Activity轉場動畫遇到的問題
阿新 • • 發佈:2018-12-30
前言
對於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);
}