使用淡入和缩放同时对视图可见性进行动画化

5
我有一个RelativeLayout,它的宽度和高度与应用程序窗口一样大,初始时其可见性设置为View.GONE。
我想在点击按钮时显示此视图。我希望同时应用淡入和缩放效果。使用ViewPropertyAnimator很容易实现淡入效果。但是我的问题是,我不知道如何使视图从较小的大小扩展到全尺寸,就像淡入一样。
是否有任何内置的动画可以实现这一点?我已经搜索了一下,但没有找到任何东西。也许我没有使用正确的搜索关键字或其他什么原因。请问有人能帮忙吗?

ViewPropertyAnimator.scale*() 是什么? - pskink
我发现可以使用ScaleAnimation来实现缩放,但问题是如何与ViewPropertyAnimator一起使用。它们会同时运行吗? - David Heisnam
你看过这个吗?http://developer.android.com/reference/android/view/ViewPropertyAnimator.html - pskink
是的,我有。但它不适合我想要的。 - David Heisnam
@DavidHeisnam:scale*() 不接受起始值并不是问题。请查看我的答案以了解如何解决它。 - Gil Vegliach
显示剩余3条评论
3个回答

13
  • ViewPropertyAnimator的方法连接起来,

这样动画就会并行运行。 AnimationSet是旧API的一部分,你应该优先选择视图属性动画。如果你想使用那种技术(写起来有点长,不太优化),你可以选择AnimatorSet(Animat-or...)。

这是一个解决视图属性动画问题的代码片段:

view.setVisibility(View.VISIBLE);
view.setAlpha(0.f);
view.setScaleX(0.f);
view.setScaleY(0.f);
view.animate()
    .alpha(1.f)
    .scaleX(1.f).scaleY(1.f)
    .setDuration(300)
    .start();

有关视图属性动画的好教程在这里


1
AnimationSet 正在按照预期的方式工作,但我认为根据教程所说,遵循您的建议会更好。非常感谢,Gil。 - David Heisnam
1
旧的API具有向后兼容的优势,但除此之外,我总是会使用11+ API(ObjectAnimator,ValueAnimator,ViewPropertyAnimator,AnimatorSet...)。例如,旧API的一个缺点是,视图不是真正的动画(只有渲染的图形是动画的)。你可能会发现View的渲染在屏幕上的某个地方,但View对屏幕上另一个区域的点击仍然响应。有点奇怪。新的API没有这个问题:整个View在布局后移动/缩放/动画化。 - Gil Vegliach
1
我不再关心ICS之前的设备了,因此我更喜欢使用最新的API。 - David Heisnam

3
这可以通过使用AnimationSet,添加AlphaAnimation和ScaleAnimation来完成。
AnimationSet animation = new AnimationSet(true);
animation.addAnimation(new AlphaAnimation(0.0F, 1.0F));
animation.addAnimation(new ScaleAnimation(0.8f, 1, 0.8f, 1)); // Change args as desired
animation.setDuration(300);
mView.startAnimation(animation);

0

你可以通过这个分别实现视图的左右滑动动画。

TranslateAnimation animate = new TranslateAnimation(0,-view.getWidth(), 0, 0);
animate.setDuration(time);
view.startAnimation(animate);
TranslateAnimation anim = new TranslateAnimation(-400f, 0f,0f,0f);
anim.setDuration(time);
view.startAnimation(anim );

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