如何实施“父母对孩子”#34;材料设计规定的导航过渡

时间:2014-12-01 18:51:41

标签: android material-design

Google的“材料设计指南”规定了以下转换为“父母与孩子”#34;父级由列表组成时的转换。 (Material Design Guidelines)

我如何提供这样的过渡?我没有意识到为实现这一目标而提供的任何内置过渡。

3 个答案:

答案 0 :(得分:9)

一种选择是使用ActivityOptionsCompat.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

垂直向上扩展

答案 1 :(得分:3)

使用共享元素启动活动

在具有共享元素的两个活动之间制作屏幕过渡动画:

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

// get the element that receives the click event
final View imgContainerView = findViewById(R.id.img_container);

// get the common element for the transition in this activity
final View androidRobotView = findViewById(R.id.image_small);

// define a click listener
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());
    }
});

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

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

从这里开始Customize Activity Transitions

答案 2 :(得分:0)

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

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进行不同的视图过渡动画。