我想创建平滑的高度变化动画。下面,您可以看到我当前的实现。它可以工作,但并不像我预期的那样顺利。
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
来驱动它,而不是创建一个扩展 Animation
的类。
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();
}
关于java - 如何在android中创建平滑的高度变化动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51673474/