Android 如何使用动画平滑地向上和从屏幕上平移视图?
假设您有这样的布局:Android 如何使用动画平滑地向上和从屏幕上平移视图?,android,android-layout,Android,Android Layout,假设您有这样的布局: ___________________________________________ | | | | | TOP CONTENT | | | |__________________
___________________________________________
| |
| |
| TOP CONTENT |
| |
|_________________________________________|
| |
| |
| BOTTOM |
| CONTENT |
| |
|_________________________________________|
我想将顶部内容滑出屏幕,我可以使用翻译动画(用XML定义)成功地做到这一点。我设置了一个监听器,以便在动画结束时,顶部内容的可见性设置为View.GONE。我的问题是,当动画执行时,顶部内容占据的区域仍保留在屏幕上。底部内容不会随之向上滑动。基本上,对于正在执行动画的500毫秒,底部内容保持在其位置,然后在动画结束后突然向上移动
如何使“底部内容”与“顶部内容”的下边缘保持参数下方的布局_,并与“顶部内容”平滑地向上滚动?这是否需要在底部内容上使用另一个动画
谢谢你的帮助
这是否需要在底部内容上使用另一个动画
我通常就是这样做的,而且效果很好。只是一个想法:
尝试使用makeInAnimation(上下文c,布尔值从左起)
和makeOutAnimation(上下文c,布尔值从右起)
这些动画最初设计为向右/向左滑动,但您可以覆盖它们或对默认动画执行转换
此外,请确保您正在使用
这将确保两个动画同时播放
希望这有帮助
来源:我有一个适合我的解决方案,甚至更好地使用动画使其平滑
private int heightOfScreen;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
configureLayoutListener();
}
private void configureLayoutListener() {
mNormalModelayoutContainer.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
heightOfScreen = mNormalModelayoutContainer.getHeight();
ViewTreeObserver viewTreeObserver = mNormalModelayoutContainer.getViewTreeObserver();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
viewTreeObserver.removeOnGlobalLayoutListener(this);
} else {
viewTreeObserver.removeGlobalOnLayoutListener(this);
}
}
});
}
private void animate() {
View viewToShiftOut = mNormalModelayoutContainer;
View viewToShiftIn = mEditModelayoutContainer;
ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "y", 0, -heightOfScreen/2);
ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftIn, "y", heightOfScreen/2, 0);
outAnim.setDuration(1000);
inAnim.setDuration(1000);
outAnim.start();
inAnim.start();
}
这适用于片段,但可适用于任何视图或活动。
注意:注意我们测量高度的方式和位置
-“入”和“出”视图可以向相反方向移动,但可以向任何指南针方向移动。感谢您的回复。我的问题是如何设置fromYDelta中的百分比?你只是猜测和检查,看看什么与顶部内容容器的底部对齐吗?我只是在我正在制作动画的视图上应用相同的
动画。这通常取决于特定的情况,但看起来你需要稍微调整一下。试试看。:-)