鸿蒙系统中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
相关产品推荐
相关产品推荐

