想象一下你有这个布局:
___________________________________________
| |
| |
| TOP CONTENT |
| |
|_________________________________________|
| |
| |
| BOTTOM |
| CONTENT |
| |
|_________________________________________|
我想从屏幕上滑动顶部内容,我可以使用翻译动画(在XML中定义)成功完成。我设置了一个监听器,以便在动画结束时,TOP CONTENT的可见性设置为View.GONE。我的问题是,当动画正在执行时,TOP CONTENT占用的区域仍然在屏幕上。 BOTTOM CONTENT不会随之滑动。基本上,对于动画执行的500毫秒,BOTTOM CONTENT保持在其位置,然后在动画结束后突然向上移动。
如何使BOTTOM CONTENT在TOP CONTENT的下边缘保持其layout_below参数并以TOP CONTENT平滑向上滚动?这是否需要在BOTTOM CONTENT上使用另一个动画?
感谢您的帮助!
答案 0 :(得分:1)
这是否需要在BOTTOM CONTENT上使用另一个动画?
这通常是我如何做的,而且效果很好。
答案 1 :(得分:1)
只是一个想法:
尝试使用makeInAnimation(Context c, boolean fromLeft)
和makeOutAnimation(Context c, boolean toRight)
。
这些最初设计为向右/向左滑动,但您可以覆盖它们或对默认动画执行转换。
另外,请确保您使用的是AnimationSet。
这将确保同时播放两个动画。
希望这有帮助!
来源:http://developer.android.com/reference/android/view/animation/AnimationUtils.html
答案 2 :(得分:0)
我有一个适合我的解决方案,甚至更好地使用动画来使其流畅。
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();
}
这适用于片段,但可以适用于任何视图或活动。 N / B: - 注意我们测量高度的方式和位置 - 进出视图在oppsosite方向上移动,但可以在任何罗盘方向上移动。