Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用带有ChangeImageTransform的共享元素转换在两个活动之间设置ImageView动画_Android_Android 5.0 Lollipop_Shared Element Transition_Activity Transition - Fatal编程技术网

Android 使用带有ChangeImageTransform的共享元素转换在两个活动之间设置ImageView动画

Android 使用带有ChangeImageTransform的共享元素转换在两个活动之间设置ImageView动画,android,android-5.0-lollipop,shared-element-transition,activity-transition,Android,Android 5.0 Lollipop,Shared Element Transition,Activity Transition,我试图在Android API level 21中的两个活动之间将一个ImageView动画化到另一个位置。由于Android L预览中的“MoveImage”已被删除,因此我改用了“”,但文档中的示例代码不起作用(这两个图像分别设置了动画) 有没有任何有效的例子?谢谢 要在具有共享元素的两个活动之间制作屏幕过渡动画, 您可以阅读并遵循上述步骤: 在主题中启用窗口内容转换 在样式中指定共享元素过渡 将转换定义为XML资源 使用android:transitionName属性为两个布局中的共享

我试图在Android API level 21中的两个活动之间将一个ImageView动画化到另一个位置。由于Android L预览中的“MoveImage”已被删除,因此我改用了“”,但文档中的示例代码不起作用(这两个图像分别设置了动画)



有没有任何有效的例子?谢谢

要在具有共享元素的两个活动之间制作屏幕过渡动画, 您可以阅读并遵循上述步骤:

  • 在主题中启用窗口内容转换
  • 在样式中指定共享元素过渡
  • 将转换定义为XML资源
  • 使用android:transitionName属性为两个布局中的共享元素分配一个公共名称
  • 使用ActivityOptions.MakeScenetTransitionAnimation()方法
  • 关于第三步,根据:

    结合ChangeBounds,ChangeImageTransform允许更改大小、形状或ImageView.ScaleType的ImageView平滑地设置内容动画

    res/transition/your_transition.xml应该是这样的:

    <transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
        <changeBounds>
            <targets>
                <target android:targetId="@id/ivA" />
                <target android:targetId="@id/ivB" />
            </targets>
        </changeBounds>
        <changeImageTransform>
            <targets>
                <target android:targetId="@id/ivA" />
                <target android:targetId="@id/ivB" />
            </targets>
        </changeImageTransform>
    </transitionSet>
    
    Bundle bundle = null;
    
    if (activity != null) {
        ActivityOptionsCompat options =
                    ActivityOptionsCompat.makeSceneTransitionAnimation(activity, Frag2_, "MYTRANSITIONVIEW");
        bundle = options.toBundle();
    }
    activity.startActivity(i, bundle);
    
    
    
    或者,如果只需要对ivA和ivB设置动画,则只需这样做:

    <transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
        <changeBounds/>
        <changeImageTransform/>
    </transitionSet>
    

    我根据本指南、其他一些指南和参考资料完成了这项工作

    此样式的过渡集。我把它放在res/transition下:

    <transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
        <changeBounds>
            <targets>
                <target android:targetId="@id/ivA" />
                <target android:targetId="@id/ivB" />
            </targets>
        </changeBounds>
        <changeImageTransform>
            <targets>
                <target android:targetId="@id/ivA" />
                <target android:targetId="@id/ivB" />
            </targets>
        </changeImageTransform>
    </transitionSet>
    
    它在API21客户机上工作。它在API 16客户端上不起作用,因为XML标记无效

    我希望这有帮助

    轻微的更新,为了在退出时获得反向转换,我不得不打电话

    supportFinishAfterTransition();
    

    而不是完成()

    我一直在尝试让它工作,但是新活动的enter转换逐渐消失,ImageView是旧活动中显示的最后一个内容。退出转换仍然有效。@timmahtimmah您是否遵循了文档中的所有步骤?请提供更多信息,谢谢:)我知道发生了什么事。我正在将视图添加到ListView标题中,因此在转换之后才能找到它。解决方案是推迟转换,然后在ListView的OnPreDrawListener中启动它。您好,我曾尝试在我的应用程序中使用它,但当我单击列表的某个项目时,列表的图像会转到另一个应用程序(这将变得更大),但它的大小保持不变。如果a按“后退”按钮,图像将变为正确的大小并返回列表。@Radu,为什么有人不能理解它?它不应该是res/transitions,它应该是res/transition:)
    <item name="android:windowContentTransitions">true</item>
    <item name="android:windowActivityTransitions">true</item>
    <item name="android:windowSharedElementEnterTransition">@transition/my_transition</item>
    <item name="android:windowSharedElementExitTransition">@transition/my_transition</item>
    
    Bundle bundle = null;
    
    if (activity != null) {
        ActivityOptionsCompat options =
                    ActivityOptionsCompat.makeSceneTransitionAnimation(activity, Frag2_, "MYTRANSITIONVIEW");
        bundle = options.toBundle();
    }
    activity.startActivity(i, bundle);
    
    supportFinishAfterTransition();