gpt4 book ai didi

java - 使用 ValueAnimator 将 View 缩放到另一个 View 的大小

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:47 25 4
gpt4 key购买 nike

我正在尝试使用 ValueAnimator 调整一个 View 的大小以适应另一个 View 的大小。我使用它而不是动画,因为我需要 View 在之后可以点击。

private Animator getHeightScaleAnimator(View target) {
ConstraintLayout.LayoutParams thisParams = (ConstraintLayout.LayoutParams) getLayoutParams();
ConstraintLayout.LayoutParams targetParams = (ConstraintLayout.LayoutParams) target.getLayoutParams();

int currentHeight = thisParams.height;
int desiredHeight = targetParams.height;

ValueAnimator animator = ValueAnimator.ofInt(currentHeight, desiredHeight);
animator.addUpdateListener(animation -> {
int newInt = (int) animation.getAnimatedValue();
thisParams.width = newInt;
invalidate();
requestLayout();
});
return animator;
}

上面的代码显示了一种方法,在该方法中我尝试将 View 的高度增加到所需的 View 高度,并且我对宽度有相同的方法,但使用的是宽度而不是高度。

期望的行为是 View 增加其大小,直到它与目标 View 一样大,但由于某些奇怪的原因, View 移动而不是调整大小。

实现类是ImageView的扩展,但ImageView的方法没有改变。


我可以做些什么来以动画方式将一个 View 的大小增加到另一个 View 的大小?

最佳答案

只需在您的代码中添加以下方法。

private Animator getViewScaleAnimator(View from, final View target) {
// height resize animation
AnimatorSet animatorSet = new AnimatorSet();
int desiredHeight = from.getHeight();
int currentHeight = target.getHeight();
ValueAnimator heightAnimator = ValueAnimator.ofInt(currentHeight, desiredHeight);
heightAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) target.getLayoutParams();
params.height = (int) animation.getAnimatedValue();
target.setLayoutParams(params);
}
});
animatorSet.play(heightAnimator);

// width resize animation
int desiredWidth = from.getWidth();
int currentWidth = target.getWidth();
ValueAnimator widthAnimator = ValueAnimator.ofInt(currentWidth, desiredWidth);
widthAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) target.getLayoutParams();
params.width = (int) animation.getAnimatedValue();
target.setLayoutParams(params);
}
});
animatorSet.play(widthAnimator);
return animatorSet;
}

并在任何事件中调用它。(例如点击)

getViewScaleAnimator(fromView, targetView).setDuration(1000).start();

这是一个输出。

enter image description here

关于java - 使用 ValueAnimator 将 View 缩放到另一个 View 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43905719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com