在Activity转换中定义共享元素运动

时间:2016-12-07 17:25:59

标签: android animation shared-element-transition activity-transition

我想定义两个Activity之间的转换。我的目标是在活动之间共享一个图像和两个文本,但我想为文本定义弧形运动(并保留图像的changeBounds)。

我使用以下内容设置样式:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

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

    <item name="android:windowSharedElementsUseOverlay">false</item>
    <item name="android:windowAllowEnterTransitionOverlap">true</item>
    <item name="android:windowAllowReturnTransitionOverlap">true</item>
</style>

    

<style name="AppTheme.DetailActivity" parent="AppTheme">
    <item name="android:windowExitTransition">@transition/detail_exit</item>
    <item name="android:windowEnterTransition">@transition/detail_enter</item>

    <item name="android:windowSharedElementEnterTransition">@transition/detail_shared_enter</item>
    <item name="android:windowSharedElementExitTransition">@transition/detail_shared_exit</item>
</style>

我像这样启动DetailActivity:

                ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,
                Pair.create(findViewById(R.id.image), "image"),
                Pair.create(findViewById(R.id.text), "text"));
            Intent intent = new Intent(MainActivity.this, DetailActivity.class);
            startActivity(intent, options.toBundle());

问题是,这个detail_shared_enter不适用于动画:

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="@android:integer/config_mediumAnimTime">

<arcMotion android:minimumHorizontalAngle="45"
           android:minimumVerticalAngle="45">
    <targets>
        <target android:targetId="@id/image2"/>
    </targets>
</arcMotion>

<autoTransition>
    <targets>
        <target android:excludeId="@id/image2"/>
    </targets>
</autoTransition>
</transitionSet>

这样,共享元素就会出现在最终位置,没有任何动画。 windowEnterTransition有效。

提前感谢您的帮助!

更新 我根据本教程找到了解决方案:https://blog.stylingandroid.com/curved-motion-part-1/

解决方案如下:

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
           android:transitionOrdering="together">

<changeBounds>
    <targets>
        <target android:excludeId="@id/image2"/>
    </targets>
</changeBounds>

<changeBounds>
    <targets>
        <target android:targetId="@id/image2"/>
    </targets>

    <arcMotion android:maximumAngle="90"
               android:minimumHorizontalAngle="90"
               android:minimumVerticalAngle="0"/>
</changeBounds>

</transitionSet>
  1. 你必须定义动画,它会驱逐你的动画 后来定义。
  2. 您将arcMotion INSIDE更改为changeBounds。
  3. 最重要的是:忽略&#34;此处不允许使用arcMotion&#34; 弱警告!

0 个答案:

没有答案
相关问题