過渡形式啟動一個 Activity:
ActivityOptions 類中有很多切換 Activity 相關(guān)的過渡動畫,場景切換火本、放大動畫削茁、揭露動畫、自定義動畫等粟害。
用法:
options = ActivityOptions.makexx();
startActivity(intent, options.toBundle());
進(jìn)出過渡
有三個類蕴忆,explode
、 slide
悲幅、 fade
套鹅,都繼承 Visibility站蝠,而 Visibility 繼承 Transition 。
trasition | 動畫效果 |
---|---|
explode | 從場景的中心進(jìn)出 |
slide | 從場景的一邊進(jìn)出卓鹿,指定 slideEdge 決定哪一邊 |
fade | 在場景中改變透明度的方式 |
- xml形式靜態(tài)配置動畫
<!-- /res/values/styles.xml -->
<!--開啟 window content transitions-->
<item name="android:windowContentTransitions">true</item>
<!--指定進(jìn)入退出過渡動畫-->
<item name="android:windowEnterTransition">@transition/explode</item>
<item name="android:windowExitTransition">@transition/explode</item>
<!-- /res/transition/explode.xml -->
<transitionSet
xmlns:android="http://schemas.android.com/apk/res/android">
<explode/>
</transitionSet>
- 代碼中動態(tài)配置動畫效果
// /java/…/MainActivity.java
//開啟 window content transitions
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
//指定進(jìn)入退出過渡動畫
//為了完整的效果菱魔,在被調(diào)用的 Activity 中也要啟用 window content transitions
getWindow().setEnterTransition(new Explode());
getWindow().setExitTransition(new Explode());
共享元素過渡
transition | 動畫效果 |
---|---|
changeBounds | 移動、縮小吟孙、放大 |
changeTransform | 縮小澜倦、旋轉(zhuǎn)視圖 |
changeImageTransform | 改變大小、縮放圖片 |
- 定義一個 transition 資源文件
<!-- res/transition/shared_element_transition.xml -->
<?xml version="1.0" encoding="utf-8"?>
<changeBounds xmlns:android="http://schemas.android.com/apk/res/android" >
<arcMotion
android:minimumHorizontalAngle="0"
android:minimumVerticalAngle="15"
android:maximumAngle="90" />
</changeBounds>
- 應(yīng)用到主題中
動態(tài)方法配置
<!-- /res/values/styles -->
<item name="android:windowSharedElementExitTransition">@transition/shared_element_transition</item>
<item name="android:windowSharedElementEnterTransition">@transition/shared_element_transition</item>
代碼中動態(tài)方法配置
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().setSharedElementExitTransition();
getWindow().setSharedElementEnterTransition();
- 在有相同元素的布局文件中杰妓,為相同的視圖聲明 android:transitionName 屬性角钩。(名稱相同)
<!-- activity_main.xml -->
...
<ImageView
android:id="@+id/image"
android:transitionName="google"
... />
...
<!-- activity_another.xml -->
...
<ImageView
android:transitionName="google"
android:id="@+id/image"
... />
...
或者代碼中動態(tài)配置:調(diào)用 View.setTransitionName()
闯睹。
-
使用 ActivityOptions.makeSceneTransitionAnimation() 方法應(yīng)用過渡動畫
// MainActivity.java private ImageView image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); image = (ImageView) findViewById(R.id.image); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, AnotherActivity.class); ActivityOptions options = ActivityOptions. makeSceneTransitionAnimation(MainActivity.this, image, "google"); startActivity(intent,options.toBundle()); } }); } // SecondActivity.java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_another); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //使用這個方法代替 finishActivity()虫蝶,確保 Transition 完成之后再結(jié)束 Activity finishAfterTransition(); } }); }
有多個共享元素時
使用 ActivityOptions.makeSceneTransitionAnimation(activity, pair…) 方法:
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,
Pair.create((View) image, "google"),
Pair.create((View) button, "btnSwitch"));
參考 https://developer.android.com/training/material/animations.html