You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

鸿蒙系统中Android的AccelerateInterpolator与OvershootInterpolator替代方案

鸿蒙移植Android插值器可行方案
  • 直接调用鸿蒙内置插值器实现类:鸿蒙已经预置了所有Android原生常见插值器的等效实现,全部实现了Animator.TimelineCurve接口,无需手动重写接口逻辑:
    • AccelerateInterpolator对应鸿蒙AnimatorAccelerateCurve类,无参构造默认加速度因子为1,和Android默认行为完全一致,也支持传入自定义加速度因子。
    • OvershootInterpolator对应鸿蒙AnimatorOvershootCurve类,无参构造默认张力为2,和Android默认行为完全一致,也支持传入自定义张力参数。
  • 简化调用方式:如果不需要自定义插值器参数,鸿蒙属性动画可直接通过setCurveType()方法传入Animator.CurveType枚举值,ACCELERATE对应加速插值器,OVERSHOOT对应过冲插值器,代码更简洁。
  • 完整代码替换示例:
private void onSelectedY(final boolean isTop, float exitX, int duration)
{
    // 原有业务逻辑不变
    this.frame.createAnimatorProperty()
            .setDuration(duration)
            // 替换原Android插值器配置
            .setCurve(new AnimatorAccelerateCurve())
            .moveToX(exitX)
            .moveToY(exitY)
            .setStateChangedListener(new Animator.StateChangedListener() {
                @Override
                public void onStart(Animator animator) {}

                @Override
                public void onStop(Animator animator) {
                    if(isTop)
                    {
                        mFlingListener.onCardExited();
                        mFlingListener.topExit(dataObject);
                    }
                    else
                    {
                        mFlingListener.onCardExited();
                        mFlingListener.bottomExit(dataObject);
                    }
                    isAnimationRunning = false;
                }

                @Override
                public void onCancel(Animator animator) {}

                @Override
                public void onEnd(Animator animator) {}
            })
            .rotate(getVerticalExitRotation(isTop))
            .start();
}

内容的提问来源于stack exchange,提问作者Subham Karmakar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:42:02