有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在harmonyos中,ValueAnimator的替代方案是什么。OFIT(整数…值)?

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

在Android中,我们可以创建ValueAnimator的实例,并通过如下方式传递int值:

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

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

AnimatorValue finalPositionAnimator = new AnimatorValue();

但是,我不能设置int值


共 (2) 个答案

  1. # 1 楼答案

    我照做了

    首先创建getAnimatedValue()util函数,如下所示

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

    你可以在AnimatorValuehere下看到更多类似的方法,比如ofInt()

  2. # 2 楼答案

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

    AnimatorValue animatorValue = new AnimatorValue();
    animatorValue.setDuration(3000);
    animatorValue.setValueUpdateListener((AnimatorValue animation, float value) -> {
        int finalValue = (int) (value * 90 + 10);
    });
    animatorValue.start();