Android 如何实施;“亲子关系”;材料设计规定的航行过渡

Android 如何实施;“亲子关系”;材料设计规定的航行过渡,android,material-design,Android,Material Design,谷歌的材料设计指南规定,当父对象由列表组成时,“父对象到子对象”的转换如下 我如何提供这样的过渡?我不知道有任何内置转换可以实现这一点。使用共享元素启动活动 要在具有共享元素的两个活动之间制作屏幕过渡动画,请执行以下操作: 在主题中启用窗口内容转换。 在样式中指定共享元素过渡。 将转换定义为XML资源。 使用android:transitionName属性为两个布局中的共享元素分配一个公共名称。 使用ActivityOptions.MakeScenetTransitionAnimation()方

谷歌的材料设计指南规定,当父对象由列表组成时,“父对象到子对象”的转换如下


我如何提供这样的过渡?我不知道有任何内置转换可以实现这一点。

使用共享元素启动活动

要在具有共享元素的两个活动之间制作屏幕过渡动画,请执行以下操作:

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

对于在代码中生成的共享动态视图,请使用View.setTransitionName()方法在两个活动中指定一个公共元素名称

要在完成第二个活动时反转场景过渡动画,请调用activity.finishAfterTransition()方法,而不是activity.finish()


从这里开始

一个选项是使用
活动选项compat.makeScaleUpAnimation

Activity activity = getActivity();
Intent intent = new Intent(activity, OtherActivity.class);
Bundle options = ActivityOptionsCompat.makeScaleUpAnimation(
    sourceView, 0, 0, sourceView.getWidth(), sourceView.getHeight()).toBundle();

ActivityCompat.startActivity(activity, intent, options);

这将导致新活动从您的
sourceView

垂直和水平向外扩展。嘿,我想我晚了几周,但我刚刚发布了一个用于构建此活动的库,灵感来自谷歌收件箱:

您可以使用下面的代码制作动画

Intent intent = new Intent(MainActivity.this, NFCTagInformationActivity.class);
Bundle options = ActivityOptionsCompat.makeClipRevealAnimation(
            cvTagInfoSmall, 0, 0, cvTagInfoSmall.getWidth(), cvTagInfoSmall.getHeight()).toBundle();
ActivityCompat.startActivity(this, intent, options);

对于不同的视图转换动画,可以使用
makeScaleUpAnimation
而不是
makeClipRevealAnimation

如何扭转它,我的意思是当按下后退按钮时如何应用?以及如何调整速度?很高兴这么多年后能够标记出一个被接受的答案-唯一能够理解和处理所有复杂过渡的解决方案。
Intent intent = new Intent(MainActivity.this, NFCTagInformationActivity.class);
Bundle options = ActivityOptionsCompat.makeClipRevealAnimation(
            cvTagInfoSmall, 0, 0, cvTagInfoSmall.getWidth(), cvTagInfoSmall.getHeight()).toBundle();
ActivityCompat.startActivity(this, intent, options);