之共享元素

翻译一段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屏幕录像用不成了, 好用的求录屏软件!! - - !

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