Android 当一个View 平移后,使他原来的位置可用。
程序员文章站
2024-03-26 08:12:41
...
如下所示:
ViewPropertyAnimator animate = mLinearLayout.animate();
animate.translationY(height).setDuration(500);
animate.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mLinearLayout.getLayoutParams();
params.topMargin = params.topMargin+ (-height);
mLinearLayout.setLayoutParams(params);
mLinearLayout.clearAnimation();
}
});
animate.start();
前两句 将一个 View 向下移动,时间为500,但是移动之后 其原来的位置不能使用,被遮挡。
查阅资料找到如下解决方法
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mLinearLayout.getLayoutParams();
params.topMargin = params.topMargin+ (-(mLinearLayout.getMeasuredHeight()));
mLinearLayout.setLayoutParams(params);
mLinearLayout.clearAnimation();
例如上面 我们将view 向下移动了 height。那么监听动画完成之后 动态的设置这个view的位置即可,使用params.setMargins(), 这个方法可以设置位置,我采用的是 设置 marginTop ,因为我是向下移动,移动之后上面用不了了,然后让 view 设置 marginTop 即可,注意这里是 marginTop 是 负值。至于为什么是负值,自己试一下就知道了。