在纯血鸿蒙中最具有用户特色的效果就是自定义的动画效果。在纯血鸿蒙中有多种定义方式,但是今天介绍的是ApI中的自定义动画。
 
注意: 动画本身具有生命周期,但是不支持在UIAbility的文件使用,简单而言就是不允许在UIAbility生命周期中调用
 
属性 参数 功能 参数类型 返回类型 create create(options: AnimatorOptions): AnimatorResult 创建动画 AnimatorOptions (必填) AnimatorResult 
 
属性 参数 功能 参数类型 返回类型 reset reset(options: AnimatorOptions): void 更新当前动画器。 AnimatorOptions(必填) 无 play play(): void 启动动画。动画会保留上一次的播放状态,比如播放状态设置reverse后,再次播放会保留reverse的播放状态。 无 无 finish finish(): void 结束动画 无 无 pause pause(): void 暂停动画。 无 无 cancel cancel(): void 取消动画。 无 无 reverse reverse(): void 以相反的顺序播放动画。使用interpolating-spring曲线时此接口无效。 无 无 
 
属性 参数 功能 参数类型 返回类型 onFrame onFrame: (progress: number) => void 接收到帧时回调。 progress:number(必填) 无 onFinish onFinish: () => void 动画完成时回调。 无 无 onCancel onCancel: () => void 动画被取消时回调。 无 无 onRepeat onRepeat: () => void 动画重复时回调。 无 无 
 
名称 类型 必填 功能 duration number 是 动画持续时间 easing string 是 动画插值曲线 delay number 是 动画延时播放时长,单位毫秒,设置为0时,表示不延时。 fill ‘none’ ‘forwards’ ‘backwards’ ‘both’ 是 动画执行后是否恢复到初始状态,动画执行后,动画结束时的状态(在最后一个关键帧中定义)将保留。 direction ‘normal’ ‘reverse’ ‘alternate’ ‘alternate-reverse’ 是 动画播放模式正序,逆序,交替正序,交替逆序 iterations number 是 动画播放次数 begin number 是 动画插值起点。 end number 是 动画插值终点。 
 
注意:以上为涉及属性和参数一下为示例代码和详细注释 import  {  Animator as  animator,  AnimatorResult }  from  '@kit.ArkUI' ;  
@ Entry @ Component { private  TAG :  string  =  '[AnimatorTest]'  private  backAnimator:  AnimatorResult |  undefined  =  undefined  private  flag:  boolean  =  false  @ State :  number  =  100  @ State :  number  =  100  create ( )  { this . backAnimator =  animator. create ( {  duration:  2000 ,      easing:  "ease" ,      delay:  0 ,            fill:  "forwards" ,    direction:  "normal" , iterations:  1 ,       begin:  100 ,          end:  200             } ) this . backAnimator. onFinish  =  ( )  =>  {  this . flag =  true  console . info ( this . TAG ,  'backAnimator onfinish' )  } this . backAnimator. onRepeat  =  ( )  =>  {  console . info ( this . TAG ,  'backAnimator repeat' )  } this . backAnimator. onCancel  =  ( )  =>  {  console . info ( this . TAG ,  'backAnimator cancel' )  } this . backAnimator. onFrame  =  ( value:  number )  =>  {  this . wid =  value this . hei =  value } } aboutToDisappear ( )  { this . backAnimator =  undefined ;  } build ( )  { Column ( )  {  Column ( )  {  Column ( )  . width ( this . wid)  . height ( this . hei)  . backgroundColor ( Color. Red)  } . width ( '100%' )  . height ( 300 )  Column ( )  {  Row ( )  {  Button ( 'create' )  . fontSize ( 30 )  . fontColor ( Color. Black)  . onClick ( ( )  =>  {  this . create ( )  } ) } . padding ( 10 )  Row ( )  {  Button ( 'play' )  . fontSize ( 30 )  . fontColor ( Color. Black)  . onClick ( ( )  =>  {  this . flag =  false  if  ( this . backAnimator)  {  this . backAnimator. play ( )  } } ) } . padding ( 10 )  Row ( )  {  Button ( 'pause' )  . fontSize ( 30 )  . fontColor ( Color. Black)  . onClick ( ( )  =>  {  if  ( this . backAnimator)  {  this . backAnimator. pause ( )  } } ) } . padding ( 10 )  Row ( )  {  Button ( 'finish' )  . fontSize ( 30 )  . fontColor ( Color. Black)  . onClick ( ( )  =>  {  this . flag =  true  if  ( this . backAnimator)  {  this . backAnimator. finish ( )  } } ) } . padding ( 10 )  Row ( )  {  Button ( 'reverse' )  . fontSize ( 30 )  . fontColor ( Color. Black)  . onClick ( ( )  =>  {  this . flag =  false  if  ( this . backAnimator)  {  this . backAnimator. reverse ( )  } } ) } . padding ( 10 )  Row ( )  {  Button ( 'cancel' )  . fontSize ( 30 )  . fontColor ( Color. Black)  . onClick ( ( )  =>  {  if  ( this . backAnimator)  {  this . backAnimator. cancel ( )  } } ) } . padding ( 10 )  Row ( )  {  Button ( 'reset' )  . fontSize ( 30 )  . fontColor ( Color. Black)  . onClick ( ( )  =>  {  if  ( this . flag)  {  this . flag =  false  if  ( this . backAnimator)  {  this . backAnimator. reset ( {  duration:  3000 ,  easing:  "ease-in" ,  delay:  0 ,  fill:  "forwards" ,  direction:  "alternate" ,  iterations:  3 ,  begin:  100 ,  end:  300  } ) } }  else  {  console . info ( this . TAG ,  'Animation not ended' )  } } ) } . padding ( 10 )  } } } 
}