之共享元素

翻譯一段android文檔:

原文地址

首先,在繼承了material主題屬性的style中添加

<item name="android:windowContentTransitions">true</item>

您還可以指定進入,退出動畫, 並在你的style中定義共享單元轉換, 類似這樣:

<style name="BaseAppTheme" parent="android:Theme.Material">
  <!-- enable window content transitions -->
  <item name="android:windowContentTransitions">true</item>

  <!-- specify enter and exit transitions -->
  <item name="android:windowEnterTransition">@transition/explode</item>
  <item name="android:windowExitTransition">@transition/explode</item>

  <!-- specify shared element transitions -->
  <item name="android:windowSharedElementEnterTransition">
    @transition/change_image_transform</item>
  <item name="android:windowSharedElementExitTransition">
    @transition/change_image_transform</item>
</style>

在這個例子中 change_image_transform 定義如下:

<!-- res/transition/change_image_transform.xml -->
<!-- (see also Shared Transitions below) -->
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
  <changeImageTransform/>
</transitionSet>

同樣的, 你也可以在代碼中用 Window.requestFeature() 方法代替:

// inside your activity (if you did not enable transitions in your theme)
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
// set an exit transition
getWindow().setExitTransition(new Explode());

要在代碼中指定transitions, 需要使用以下方法, 並且傳入一個 transitions 對象

setExitTransition()setSharedElementExitTransition() 方法 定義了退出transition .
setEnterTransition()setSharedElementEnterTransition() 方法定義了進入動畫.

爲了使這兩種動畫同時有效, 你需要爲這兩個Activitystyle中同時聲明:

<item name="android:windowContentTransitions">true</item>

爲了更快的開始一個進入動畫, 在被啓動的Activity中使用 Window.setAllowEnterTransitionOverlap() 方法, 這可以讓你有一個更鮮活的動畫效果

Start an activity using transitions

如果你啓用了 transitions 並且設置了退出動畫, 則當啓動Activity使用如下代碼 :

startActivity(intent,
              ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

如果你已經爲第二個Activity定義了進入動畫, 而 當 Activity 啓動時, transition 也同樣是有效的
如果想要 transitions 失效, 則啓動Activity時, 傳入一個爲 nulloptions bundle即可.

Start an activity with a shared element

在兩個Activity中使用元素共享的步驟:

  1. 在style中啓用窗口內容過度(即:<item name="android:windowContentTransitions">true</item>)

  2. 在style中指定一個共享元素transition

  3. 定義transition的xml資源文件

  4. 在共享元素的佈局裏面, 用android:transitionName屬性指定一個同樣的名字(名字一定要一樣, 不能打錯)

  5. 調用 ActivityOptions.makeSceneTransitionAnimation() 方法.

// 接收OnClick事件的view
final View imgContainerView = findViewById(R.id.img_container);

// 這個Activity中的共享元素
final View androidRobotView = findViewById(R.id.image_small);

// 定義一個OnClick監聽
imgContainerView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this, Activity2.class);
        // create the transition animation - the images in the layouts
        // of both activities are defined with android:transitionName="robot"
        ActivityOptions options = ActivityOptions
            .makeSceneTransitionAnimation(this, androidRobotView, "robot");
        // start the new activity
        startActivity(intent, options.toBundle());
    }
});

如果共享元素有多個則可以這樣寫:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
        Pair.create(view1, "agreedName1"),
        Pair.create(view2, "agreedName2"));

官方說發就是這樣, 下面我們自己來實現下這個效果
demo地址
PS:我手機升級android5.0以後SRC屏幕錄像用不成了, 好用的求錄屏軟件!! - - !

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章