Android 材料设计过渡

Posted

技术标签:

【中文标题】Android 材料设计过渡【英文标题】:Android Material design transitions 【发布时间】:2014-09-19 17:28:15 【问题描述】:

我想按照 Google 的 Material design 中的说明复制过渡。 这是link for the preview,但基本上我关心的视频是那两个:

    http://material-design.storage.googleapis.com/videos/animations-meaningfultransitions-hierarchical_transitions_topLevel_large_xhdpi.webm http://material-design.storage.googleapis.com/videos/animation-meaningfultransitions-view_contact_large_xhdpi.webm

我的问题是 UI 的容器是什么?这是一个新的活动,它的 onCreate 每个元素都有动画,还是一个片段?

特别是在第二个示例中,第一个活动有一些运动,所以在 onClick 内部是否有一个动画也创建了第二个活动? (注意点击的名字也会移动,所以这不应该是一个新的活动)

换句话说,如果我想复制它,布局(+Activity、片段)应该是什么?

【问题讨论】:

这也是我的问题! 我也很想知道这是如何做到的,尤其是第一个动画,它有一个同样扩展的帧,它碰到边缘,然后只垂直扩展。我想将它与 Fragment 一起使用,但我怀疑在 Jelly Bean 和更早的时候这是不可能的。 这些转换基本上是在场景中工作。场景不过是布局。因此,在一项活动中,您可以拥有任意数量的场景,具体取决于您的点击。看看你发给material-design.storage.googleapis.com/videos/…的这个视频,你看到的第一个布局是SCENE 1,当点击发生并打开其他布局时,就是SCENE 2。所以这两个场景所在的活动是相同的。这就是我对这个概念的理解。但是这个概念是新的,所以需要更多的研究 最有趣的是,即使添加了过渡框架,您也无法创建像提供的示例 xD Phony 东西那样流畅的动画... 【参考方案1】:

这个有过渡。

希望你能从那里提取过渡。

指南 - http://antonioleiva.com/material-design-everywhere/ 代码-https://github.com/antoniolg/MaterialEverywhere

【讨论】:

【参考方案2】:

也许为时已晚,但我发现支持库包含 ActivityOptionsCompat: https://developer.android.com/reference/android/support/v4/app/package-summary.html 它包含活动动画,如放大动画。希望这会有所帮助。

【讨论】:

我认为这是一个很好的答案。我正在研究makeCustomAnimation() 的可能性。会回来找你的 这不能回答原来的问题? ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(....) 然后startActivity(activity, intent, options.toBundle()) 就可以了【参考方案3】:

第 1 步:考虑到您正在从一个活动转移到另一个活动。因此为按钮定义 onclick 方法

   button= (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                Intent intent = new Intent(getApplicationContext(), Animation.class);
               startActivity(intent, options.toBundle());
                    startActivity(intent);
               overridePendingTransition  (R.anim.right_slide_in, R.anim.right_slide_out);
            
        );

第 2 步:现在定义启动时第二个 Activity 所需的动画

anim.right_slide_in

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <translate
        android:fromXDelta="100%p"
        android:toXDelta="0"
        android:duration="700"
        />
</set>

【讨论】:

在动画过程中导致前一个activity的布局变黑。【参考方案4】:

我想它们可以用片段来实现,但我可能怀疑它们会是单独的活动。 Android L 引入了 Activity Transitions 作为动画框架的一部分。特别是,过渡可以包含共享 UI 元素,它们指示调用者和被调用活动中的“对应”视图之间的映射。然后将转换作为传递给startActivity()ActivityOptions 对象的一部分包含在内。

我们的想法是在这些视频中实现视觉效果(即特定视图的位置或尺寸作为活动转换的一部分而改变)。当从显示所有图像的网格过渡到显示特定图像时,典型示例是 Gallery 应用程序。

这个可以以前实现(请查看this answer 或this DevBytes video by Chet Haase),但它相当复杂/hacky,因此它被作为标准资源包含在 Android L 中。

在 L 预览文档中查看 Activity Transitions 的文档,或作为 android-L 示例的一部分包含的 ActivitySceneTransitionBasic(还请记住,您可以从 here 下载 L 参考预览以获取文档新方法)。

【讨论】:

这是否也适用于支持包中的 ActivityOptionsCompat?我试过了,没成功

以上是关于Android 材料设计过渡的主要内容,如果未能解决你的问题,请参考以下文章

Android 切换按钮 - 材料设计

如何在 android 中删除 EditText 材料设计底线?

如何在android中关闭材料设计EditText的默认功能?

将材料设计图标导入 android 项目

崩溃 - 材料设计 android 5.0

使用 BottomAppBar 材料设计组件的片段过渡