安卓材料设计过渡效果

29
我希望能够复制谷歌 Material design 中所解释的过渡效果,这是预览链接,但我关心的视频只有其中两个:
  1. http://material-design.storage.googleapis.com/videos/animations-meaningfultransitions-hierarchical_transitions_topLevel_large_xhdpi.webm
  2. http://material-design.storage.googleapis.com/videos/animation-meaningfultransitions-view_contact_large_xhdpi.webm
我的问题是UI的容器是什么?这是一个在onCreate中为每个元素设置动画的新Activity还是一个Fragment?
特别是在第二个示例中,第一个Activity中有一些移动,因此在onClick中是否有一个动画也创建了第二个Activity?(请注意,点击的名称也会移动,因此这不应该是一个新的Activity)
换句话说,如果我想复制这个,布局(+活动、片段)应该是什么样子的?

这正是我的问题! - Ali
我非常渴望学习如何完成这个任务,特别是第一个动画,它有一个同样扩展的框架,击中边缘然后只垂直扩展。我想在Fragment中使用它,但我怀疑在Jelly Bean及更早版本中可能不可行。 - Alchete
这些转换基本上是在场景上工作的。场景就是布局。因此,在一个活动中,您可以根据单击次数拥有任意数量的场景。看一下你发送的这个视频 http://material-design.storage.googleapis.com/videos/animations-meaningfultransitions-hierarchical_transitions_topLevel_large_xhdpi.webm你看到的第一个布局是SCENE 1,当点击发生并且其他布局打开时,那就是SCENE 2。因此,这两个场景所放置的活动是相同的。这是我对这个概念的理解。但是这个概念是新的,因此需要进行更多的研究。 - Sagar Devanga
最有趣的是,即使添加了过渡框架,你也无法创建像提供的示例一样流畅的动画 xD 假的东西... - Wecherowski
4个回答

8

1
我认为这是一个很好的答案。我正在研究makeCustomAnimation()的可能性。稍后会回复您。 - Diolor
5
这并没有回答原始的问题? - Alex Lockwood
2
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(....) 然后使用 startActivity(activity, intent, options.toBundle()) 即可完成操作。 - Diolor

5

4
我猜它们可以使用片段来实现,但我可能会怀疑它们将成为单独的活动。Android L引入了Activity Transitions作为动画框架的一部分。特别地,这些转换可以包含共享UI元素,这些元素表示调用和被调用活动中“对应”视图之间的映射关系。然后,该转换作为传递给startActivity()ActivityOptions对象的一部分包括在内。
其想法是在这些视频中实现视觉效果(即特定视图在活动转换中改变位置或尺寸)。典型的例子是相册应用程序,在从显示所有图像的网格切换到显示特定图像时进行过渡。
以前也可以实现(请参见此答案Chet Haase的这个DevBytes视频),但它非常复杂/麻烦,因此在Android L中作为标准资源包含在内。

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


这也适用于支持包中的ActivityOptionsCompat吗?我尝试了,但没有成功。 - BamsBamx

0

步骤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);
            }
        });

第二步:现在定义在启动第二个活动时需要的动画

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>

在动画期间导致前一个活动的布局变黑。 - Rahul Rastogi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接