Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中创建平滑的高度变化动画_Java_Android_Animation_Android Animation - Fatal编程技术网

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);