Harmony OS 中用于 Android OS 中的 AccelerateInterpolator 和 OvershootInterpolator 的替代类是啥?
Posted
技术标签:
【中文标题】Harmony OS 中用于 Android OS 中的 AccelerateInterpolator 和 OvershootInterpolator 的替代类是啥?【英文标题】:What is the alternative class in Harmony OS for AccelerateInterpolator and OvershootInterpolator in Android OS?Harmony OS 中用于 Android OS 中的 AccelerateInterpolator 和 OvershootInterpolator 的替代类是什么? 【发布时间】:2021-11-08 13:05:41 【问题描述】:我正在用 JAVA 编写一个类来将一个库从 android 移植到 Harmony OS。
在下面为方法onSelectedY(boolean, float, int)
给出的Android 代码中,它需要将类AccelerateInterpolator
的构造函数添加到方法中
private void onSelectedY(final boolean isTop, float exitX, int duration)
....
....
this.frame.animate()
.setDuration(duration)
.setInterpolator(new AccelerateInterpolator())
.x(exitX)
.y(exitY)
.setListener(new AnimatorListenerAdapter()
@Override
public void onAnimationEnd(Animator animation)
if(isTop)
mFlingListener.onCardExited();
mFlingListener.topExit(dataObject);
else
mFlingListener.onCardExited();
mFlingListener.bottomExit(dataObject);
isAnimationRunning = false;
)
.rotation(getVerticalExitRotation(isTop));
对于 AccelerateInterpolator
类的等效 Harmony OS 组件,有一个名为 Animator.TimelineCurve
的接口。
但是它作为接口的问题是它没有构造函数,在这种情况下需要它。如果我直接使用接口,我必须在这里自己重写接口,但是不能这样做,因为没有什么可以手动重写。
OvershootInterpolator
也是如此。
这种情况的解决方法是什么?
问候,苏布汉姆
【问题讨论】:
【参考方案1】:ohos.agp.animation.Animator.CurveType 是 Android 中 Interpolators 的等效 API。您必须使用 setCurveType(int) API,而对于 AccelerateInterpolator,您必须使用 Animator.CurveType.ACCELERATE。对于 OvershootInterpolator 使用 Animator.CurveType.OVERSHOOT,
用法:
animator.setCurveType(Animator.CurveType.ACCELERATE);
【讨论】:
【参考方案2】:您可以查看this development documentation 看看是否有帮助。
此外,TimelineCurve 类还有两个实现:CubicBezierCurve 和 SpringCurve。
【讨论】:
以上是关于Harmony OS 中用于 Android OS 中的 AccelerateInterpolator 和 OvershootInterpolator 的替代类是啥?的主要内容,如果未能解决你的问题,请参考以下文章
为什么“鸿蒙”不是第二个“安卓”,如何看待Harmony OS里的Android痕迹?
Harmony OS — ProgressBar垂直水平进度条