2

我正在使用 Java SDK 在 HarmonyOS 中创建一个自定义组件。我必须为动画组件制作动画。我必须在 int 值之间为组件设置动画。为此,我需要AnimatorValue(In Android ValueAnimator)的实例。

在 Android 中,我们可以创建 ValueAnimator 的实例并像这样传递 int 值:

ValueAnimator finalPositionAnimator = ValueAnimator.ofInt(10, 100);

但是,在 HMOS 中,我可以使用以下代码创建 AnimatorValue 的实例:

AnimatorValue finalPositionAnimator = new AnimatorValue();

但是,我无法设置 int 值。

4

2 回答 2

0

目前,HarmonyOS 中没有类似的方法。您可以尝试以下方法来设置整数:

AnimatorValue animatorValue = new AnimatorValue();
animatorValue.setDuration(3000);
animatorValue.setValueUpdateListener((AnimatorValue animation, float value) -> {
    int finalValue = (int) (value * 90 + 10);
});
animatorValue.start();
于 2021-07-29T02:03:12.187 回答
0

我做了如下。

首先创建 getAnimatedValue() 实用函数,如下所示。

public static float getAnimatedValue(float fraction, int... values) {
        if (values == null || values.length == 0) {
            return 0;
        }
        if (values.length == 1) {
            return values[0] * fraction;
        } else {
            if (fraction == 1) {
                return values[values.length - 1];
            }
            float oneFraction = 1f / (values.length - 1);
            float offFraction = 0;
            for (int i = 0; i < values.length - 1; i++) {
                if (offFraction + oneFraction >= fraction) {
                    return values[i] + (fraction - offFraction) * (values.length - 1) * (values[i + 1] - values[i]);
                }
                offFraction += oneFraction;
            }
        }
        return 0;
    }

然后,您可以像这样使用上述方法

AnimatorValue animatorValue = new AnimatorValue();
animatorValue.setValueUpdateListener((animatorValue, v) -> {
         float value = AnimationUtils.getAnimatedValue(v, 10, 100);
});

您可以在此处的 AnimatorValue 下看到更多类似ofInt()的方法

于 2021-08-03T10:56:12.260 回答