Java 如何在android中创建平滑的高度变化动画
我想创建平滑的高度变化动画。下面,您可以看到我当前的实现。它能工作,但不像我预期的那样平滑Java 如何在android中创建平滑的高度变化动画,java,android,animation,android-animation,Java,Android,Animation,Android Animation,我想创建平滑的高度变化动画。下面,您可以看到我当前的实现。它能工作,但不像我预期的那样平滑 import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; public class HeightAnimation extends Animation { private final int targetHeight;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Transformation;
public class HeightAnimation extends Animation {
private final int targetHeight;
private final View view;
private final int height;
public HeightAnimation(View view, int targetHeight) {
this.view = view;
this.targetHeight = targetHeight;
height = view.getHeight();
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
view.getLayoutParams().height = (int) (height + (targetHeight - height) * interpolatedTime);
view.requestLayout();
}
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
public boolean willChangeBounds() {
return true;
}
}
有谁有更好的解决方案吗?也许有一种方法可以使用ObjectAnimator?而不是创建一个扩展动画的类,我认为您应该使用ObjectAnimator来驱动它
private void animateViewHeight(View view, int targetHeight) {
ValueAnimator animator = ObjectAnimator.ofInt(view.getHeight(), targetHeight);
animator.addUpdateListener(animation -> {
LayoutParams params = view.getLayoutParams();
params.height = (int) animation.getAnimatedValue();
view.setLayoutParams(params);
});
animator.start();
}
有一个简单的方法
而且足够光滑
view.clearAnimation();
view.animate().translateY(150);
回滚到以前的位置
view.clearAnimation();
view.animate().translateY(0);