Android動畫之ActivityOptionsCompat概述

ActivityOptionsCompat概述

Android動畫之Activity切換動畫overridePendingTransition實(shí)現(xiàn)和Theme Xml方式實(shí)現(xiàn)
這里只是簡單介紹ActivityOptionsCompat的使用后面文章會有更具體講解。

利用overridePendingTransition實(shí)現(xiàn)轉(zhuǎn)場動畫可以在android2.0開始使用,google在Android5.0提出了MD的設(shè)計風(fēng)格,并擴(kuò)充了Activity的轉(zhuǎn)場動畫,利用ActivityOptions和ActivityOptionsCompat可以實(shí)現(xiàn)新風(fēng)格的轉(zhuǎn)場動畫。ActivityOptionsCompat是ActivityOptions的兼容包,雖然是兼容包但內(nèi)部有的動畫風(fēng)格在5.0以下的版本依然不支持,只不過堅持在低版本使用ActivityOptionsCompat的動畫不會出錯,所以下面會重點(diǎn)講解ActivityOptionsCompat。

前面講解了利用ActivityOptionsCompat實(shí)現(xiàn)了共享元素動畫,請看 共享元素動畫

ActivityOptionsCompat 主要用于生成Context.startActivity(Intent, Bundle) 所需要的 options Bundle 再配合其他方法實(shí)現(xiàn)轉(zhuǎn)場動畫。

注意:
要使用新的過渡動畫需要在style中設(shè)置windowContentTransitions為true,作用是開啟Transition動畫:
<item name="android:windowContentTransitions">true</item>
或者利用代碼:
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
必須要添加在super.onCreate(savedInstanceState)之前

2 ActivityOptions 提供的靜態(tài)方法,實(shí)現(xiàn)切換效果

提供的靜態(tài)方法:

  • makeCustomAnimation(Context context, int enterResId, int exitResId)
  • makeClipRevealAnimation (View source, int startX, int startY, int width, int height)
  • makeScaleUpAnimation(View source, int startX, int startY, int width, int height)
  • makeThumbnailScaleUpAnimation(View source, Bitmap thumbnail, int startX, int startY)
  • makeSceneTransitionAnimation(Activity activity, View sharedElement, String sharedElementName)
  • makeSceneTransitionAnimation(Activity activity, Pair...<View, String> sharedElements)

makeCustomAnimation(Context context, int enterResId, int exitResId)

用戶自定義動畫,指定進(jìn)入和退出動畫,api16開始支持
參數(shù)說明:
enterResId:Activity進(jìn)入動畫資源id
exitResId:Activity退出動畫資源id

代碼示例:從Main8Activity啟動Main7Activity,然后從Main7Activity回到Main8Activity

ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeCustomAnimation(Main8Activity.this, R.anim.translate_left_in, R.anim.translate_right_out);
Intent intent = new Intent(Main8Activity.this, Main7Activity.class);
startActivity(intent,activityOptionsCompat.toBundle());
image

可以看到進(jìn)入Main7Activity時Main8Activity和Main7Activity的動畫都執(zhí)行了。

makeClipRevealAnimation (View source, int startX, int startY, int width, int height)

從一個view的剪切區(qū)域放大然后打開新的Activity,Api23開始支持,
參數(shù)說明:
startX,startY:區(qū)域起點(diǎn),利用source作為原點(diǎn)
width,height:區(qū)域?qū)捀?/p>

ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeClipRevealAnimation(gongxiang, 30,30,50,50);
Intent intent = new Intent(Main8Activity.this, Main7Activity.class);
startActivity(intent,activityOptionsCompat.toBundle());
image

效果不太明顯

makeScaleUpAnimation(View source, int startX, int startY, int width, int height)

放大一個view,然后顯示新的Activity
參數(shù)說明:
view:放大的view
startX,startY:從哪里開始縮放,以source為原點(diǎn)
width,height:新的activity從多大開始放大,如果是0,0則表示從最小開始。

ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeScaleUpAnimation(gongxiang, gongxiang.getWidth() / 2, gongxiang.getHeight() / 2, 0, 0);
Intent intent = new Intent(Main8Activity.this, Main7Activity.class);
startActivity(intent,activityOptionsCompat.toBundle());
image

makeThumbnailScaleUpAnimation(View source, Bitmap thumbnail, int startX, int startY)

放大一張圖片,然后打開activity
參數(shù)說明
source:參考原點(diǎn)
thumbnail:要放大的圖片
startX,startY:從哪里開始放大,以source為坐標(biāo)原點(diǎn)

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.compositedst1);
ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeThumbnailScaleUpAnimation(gongxiang,bitmap ,300,500);
Intent intent = new Intent(Main8Activity.this, Main7Activity.class);
startActivity(intent,activityOptionsCompat.toBundle());
image

效果很不明顯,只可以看到一閃而過的圖片

makeSceneTransitionAnimation(Activity activity, View sharedElement, String sharedElementName)

makeSceneTransitionAnimation(Activity activity, Pair...<View, String> sharedElements)
參考共享元素動畫文章
共享元素動畫

使用ActivityOptionsCompat之后雖然感覺很新奇,但是除了共享元素動畫之外其他的動畫設(shè)置都很受限,后面會介紹Transition說明新的利用Transition自定義進(jìn)入,退出動畫的方式。

Animation動畫概述和執(zhí)行原理
Android動畫之補(bǔ)間動畫TweenAnimation
Android動畫之逐幀動畫FrameAnimation
Android動畫之插值器簡介和系統(tǒng)默認(rèn)插值器
Android動畫之插值器Interpolator自定義
Android動畫之視圖動畫的缺點(diǎn)和屬性動畫的引入
Android動畫之ValueAnimator用法和自定義估值器
Android動畫之ObjectAnimator實(shí)現(xiàn)補(bǔ)間動畫和ObjectAnimator自定義屬性
Android動畫之ObjectAnimator中ofXX函數(shù)全解析-自定義Property,TypeConverter,TypeEvaluator
Android動畫之AnimatorSet聯(lián)合動畫用法
Android動畫之LayoutTransition布局動畫
Android動畫之共享元素動畫
Android動畫之ViewPropertyAnimator(專用于view的屬性動畫)
Android動畫之Activity切換動畫overridePendingTransition實(shí)現(xiàn)和Theme Xml方式實(shí)現(xiàn)
Android動畫之ActivityOptionsCompat概述
Android動畫之場景變換Transition動畫的使用
Android動畫之Transition和TransitionManager使用
Android動畫之圓形揭露動畫Circular Reveal
Android 動畫之 LayoutAnimation 動畫
Android動畫之視圖動畫的缺點(diǎn)和屬性動畫的引入

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容