如下所示:
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 是 负值。至于为什么是负值,自己试一下就知道了。