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());

可以看到進(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());

效果不太明顯
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());

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());

效果很不明顯,只可以看到一閃而過的圖片
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)和屬性動畫的引入