Android动画视图进入屏幕,将当前的全屏视图推出

时间:2012-04-17 17:19:06

标签: android animation layout

我需要这个API11之前的项目。

我正在寻找一种从右侧添加视图的方法,这将导致当前的全屏视图向左移动,以允许新视图在屏幕中显示。

新视图约为屏幕宽度的1/3,因此当前fusll屏幕视图应移出屏幕的距离。

我已经厌倦了使用TranslateAnimation()的各种解决方案,虽然我对动画非常满意,但是原始视图中的所有可点击区域都没有问题。

所以我开始使用布局来正确地定位它并带有负边距,但是在新的布局请求出现几秒钟后,视图会弹回原位。在动画结束侦听器上移动视图时,此解决方案也会出现波动效应。

什么是最简单的解决方案,当新视图进入或退出时,它具有良好的动画效果,并且根据布局将视图放在正确的位置。

2 个答案:

答案 0 :(得分:11)

由于您使用的是API11,请使用Animator API。所有视图现在都具有相应的setter和getter属性。要将视图向左移出范围,请获取屏幕的宽度,然后执行:

View viewToShiftOut = getOutView();
ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", 0, -widthOfScreen);
outAnim.setDuration(1000);
outAnim.start();

这会将视图及其内容完全移出屏幕,持续时间为1秒(1000毫秒)。要在其中移动一个,请执行以下操作:

View viewToShiftIn = getInView();
ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftIn, "x", widthOfScreen, 0);
inAnim.setDuration(1000);
inAnim.start();

所有属性,可点击区域等都将跟随视图,因此您将在动画完成时完成。您可以像这样动画它们:

View viewToShiftOut = getOutView();
View viewToShiftIn = getInView();
ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", 0, -widthOfScreen);
ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", widthOfScreen, 0);
outAnim.setDuration(1000);
inAnim.setDuration(1000);
outAnim.start();
inAnim.start();

Blog post

编辑:我注意到你只想将视图移动1/3,因此你可以获得每个移位widthOfScreen/3的像素数量。

编辑2:另一个优点是你可以使用硬件加速而没有大多数3.0+平板电脑的麻烦。

答案 1 :(得分:0)

您可能需要以编程方式更改AnimationListener的onAnimationEnd中的布局,以匹配您所需的最终定位,而不是使用fillAfter和fillEnabled。

要移除闪烁,请在您正在制作动画的视图上调用clearAnimation(),也可以在onAnimationEnd中调用。