【问题标题】:What is the alternative in harmonyos for ValueAnimator.ofInt(int... values)?ValueAnimator.ofInt(int... values) 的 Harmonyos 中的替代方案是什么?
【发布时间】:2021-07-27 11:11:05
【问题描述】:

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

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

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

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

AnimatorValue finalPositionAnimator = new AnimatorValue();

但是,我无法设置 int 值。

【问题讨论】:

    标签: java android huawei-mobile-services huawei-developers harmonyos


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我做了如下。

      首先创建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()的方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        相关资源
        最近更新 更多