在Material Design视频中,视图非常顺畅地展开和收缩.我试图在旧的 Android API的日子里实现这一点,它真的很昂贵而且速度很慢. Android-L中是否有任何新API可以实现这些效果? 视频效果为htt
Android-L中是否有任何新API可以实现这些效果?
视频效果为http://www.youtube.com/watch?v=Q8TXgCzxEnw#t=26
您可以使用android-L中的新动画API轻松创建您在此视频中看到的大部分效果.揭示效果
您可以为剪切圆设置动画以显示或隐藏视图.
这是您在视频中单击“播放”按钮时看到的内容.该按钮可展开并显示媒体播放器.
用于显示隐藏视图的代码(source)
// previously invisible view View myView = findViewById(R.id.my_view); // get the center for the clipping circle int cx = (myView.getLeft() + myView.getRight()) / 2; int cy = (myView.getTop() + myView.getBottom()) / 2; // get the final radius for the clipping circle int finalRadius = myView.getWidth(); // create and start the animator for this view // (the start radius is zero) ValueAnimator anim = ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius); anim.start();
如果您按照上述链接,您可以找到隐藏视图的代码.
活动进入和退出过渡
您可以指定视图进入或退出场景的方式.
当前支持的转换是爆炸,滑动和淡入淡出.还支持任何扩展android.transition.Visibility的转换.
整个视频中都可以看到很多例子.
爆炸退出过渡代码(source)
// inside your activity getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); // set an exit transition getWindow().setExitTransition(new Explode());
活动共享元素转换
您可以指定两个活动之间共享的元素如何在它们之间进行转换.
支持的转换是:
> changeBounds – 动画显示目标视图的布局边界的更改.
> changeClipBounds – 动画显示目标视图剪辑边界的更改.
> changeTransform – 动画目标视图的缩放和旋转变化.
> changeImageTransform – 为图像视图设置动画大小和比例类型的更改.
要进行共享元素转换,您需要执行以下操作:(source)
>以您的风格启用窗口内容转换.
>在您的样式中指定共享元素过渡.
>将转换定义为XML资源.
>使用android:viewName属性为两个布局中的共享元素指定一个公用名.
>使用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:viewName="robot" ActivityOptions options = ActivityOptions .makeSceneTransitionAnimation(this, androidRobotView, "robot"); // start the new activity startActivity(intent, options.toBundle()); } });
我还没想到的一个动画是同一活动中的扩展/合约动画,可以在日历应用程序中看到.
我唯一可以说的是他们正在使用高程,因为我们可以看到阴影.我会尝试破解它,看看我是否可以重新创建它.