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 中删除 EditText 材料设计底线?