ValueAnimator.ofInt(int... values) 在 harmonyos 中的替代方案是什么?
What is the alternative in harmonyos for ValueAnimator.ofInt(int... values)?
我正在使用 Java SDK 在 HarmonyOS 中创建自定义组件。我必须在哪里处理动画组件的动画。
我必须在 int 值之间为组件设置动画。为此,我需要 AnimatorValue(In Android ValueAnimator).
的实例
在 Android 中,我们可以创建 ValueAnimator 实例并像这样传递 int 值:
ValueAnimator finalPositionAnimator = ValueAnimator.ofInt(10, 100);
但是,在 HMOS 中,我可以使用以下代码创建 AnimatorValue 的实例:
AnimatorValue finalPositionAnimator = new AnimatorValue();
但是,我无法设置 int 值。
鸿蒙目前暂无类似方法。您可以尝试以下方法设置整数:
AnimatorValue animatorValue = new AnimatorValue();
animatorValue.setDuration(3000);
animatorValue.setValueUpdateListener((AnimatorValue animation, float value) -> {
int finalValue = (int) (value * 90 + 10);
});
animatorValue.start();
我做了如下操作
首先创建 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);
});
您可以在 AnimatorValue here
下看到更多类似于 ofInt() 的方法
我正在使用 Java SDK 在 HarmonyOS 中创建自定义组件。我必须在哪里处理动画组件的动画。 我必须在 int 值之间为组件设置动画。为此,我需要 AnimatorValue(In Android ValueAnimator).
的实例在 Android 中,我们可以创建 ValueAnimator 实例并像这样传递 int 值:
ValueAnimator finalPositionAnimator = ValueAnimator.ofInt(10, 100);
但是,在 HMOS 中,我可以使用以下代码创建 AnimatorValue 的实例:
AnimatorValue finalPositionAnimator = new AnimatorValue();
但是,我无法设置 int 值。
鸿蒙目前暂无类似方法。您可以尝试以下方法设置整数:
AnimatorValue animatorValue = new AnimatorValue();
animatorValue.setDuration(3000);
animatorValue.setValueUpdateListener((AnimatorValue animation, float value) -> {
int finalValue = (int) (value * 90 + 10);
});
animatorValue.start();
我做了如下操作
首先创建 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);
});
您可以在 AnimatorValue here
下看到更多类似于 ofInt() 的方法