Android 动画 View 进入屏幕,将当前全屏 View 推出

标签 android animation layout

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

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

新 View 大约是屏幕宽度的 1/3,这就是当前全屏幕 View 应该移出屏幕的距离。

我已经厌倦了 TranslateAnimation() 的各种解决方案,尽管我对动画很满意,但我对原始 View 中的所有可点击区域不在它们应该在的位置有问题。

所以我开始尝试使用负边距正确定位布局,但几秒钟后,当新的布局请求出现时, View 会弹回原位。在动画结束监听器上移动 View 时,此解决方案也会产生不稳定的效果。

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

最佳答案

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

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

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

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

所有属性、可点击区域等都将跟随 View ,因此您将在动画结束时完成。您可以像这样将它们一起制作动画:

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

编辑:我注意到您只想将 View 移动 1/3,因此您可以获得每次移动 widthOfScreen/3 的像素数量。

编辑 2:另一个优点是您可以将它与硬件加速一起使用,而不会像大多数 3.0+ 平板电脑那样出现问题。

关于Android 动画 View 进入屏幕,将当前全屏 View 推出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195926/

相关文章:

android - android中的自定义微调器弹出列表

android - 如何在 EditText 中居中和左对齐提示文本?

android - 模拟器预览与实际设备不一样

html - 更改移动设备上的 Bootstrap 顺序 - 3 个不同的框

android - ExoPlayer 中的自定义时间栏

Android ImageView 来自 URL : Not Getting Set (Using Picasso)

javascript - 如何防止多次播放动画 - Jquery

Jquery/CSS "Fan Out"动画

css - 关闭时动画 Bootstrap 菜单

html - 在IE和FF中定位-浏览器布局不一致的box fix解决方案