4

我正在用 JAVA 编写一个类来将一个库从 Android 移植到 Harmony OS。在下面给出的方法的Android代码中onSelectedY(boolean, float, int),它需要将类的构造函数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));
}

对于等价的 Harmony OS 组件类AccelerateInterpolator,有一个名为 的接口Animator.TimelineCurve。但是它作为接口的问题是它没有构造函数,在这种情况下需要它。如果我直接使用接口,我将不得不在此处自己覆盖接口,但这无法完成,因为没有什么可以手动覆盖。

也一样OvershootInterpolator

这种情况下的解决方法是什么?

问候, 苏布姆

4

2 回答 2

2

您可以查看这个开发文档,看看它是否有帮助。

此外,TimelineCurve 类有两种实现:CubicBezierCurveSpringCurve

于 2021-09-14T08:18:56.023 回答
2

ohos.agp.animation.Animator.CurveType是Android中插值器的等效 API 。你必须使用setCurveType(int) API,对于AccelerateInterpolator你必须使用Animator.CurveType.ACCELERATE。对于OvershootInterpolator使用Animator.CurveType.OVERSHOOT

用法:

    animator.setCurveType(Animator.CurveType.ACCELERATE);
于 2021-09-13T08:58:11.747 回答