2017-05-17 82 views
1

我試圖動搖動漫我的看法,我寫這篇文章的代碼,但在我看來,有可能更容易動畫設置,防抖效果

var animatorSet = AnimatorSet() 
    var objectRotateAnimator = ObjectAnimator.ofFloat(shake, "rotation", -5f, 5f) 
    objectRotateAnimator.apply { 
     repeatMode = ValueAnimator.REVERSE 
     repeatCount = ValueAnimator.INFINITE 
     duration = 70 
     interpolator = LinearInterpolator() 
    } 

    var objectTranslateAnimator = ObjectAnimator.ofFloat(shake, "translate", -5f, 5f) 
    objectTranslateAnimator.apply { 
     repeatMode = ValueAnimator.REVERSE 
     repeatCount = ValueAnimator.INFINITE 
     duration = 70 
     interpolator = LinearInterpolator() 
    } 

    start_shake.setOnClickListener { 
     animatorSet.play(objectRotateAnimator).with(objectTranslateAnimator) 
     animatorSet.start() 
    } 

我如何能做到這一點更簡單嗎?

回答

1

您可以提取一些功能和領域,以減少重複:

private val linearInterpolator = LinearInterpolator() 

private fun shakeAnimator(propertyName: String) = 
     ObjectAnimator.ofFloat(shake, propertyName, -5f, 5f).apply { 
      repeatMode = ValueAnimator.REVERSE 
      repeatCount = ValueAnimator.INFINITE 
      duration = 70 
      interpolator = linearInterpolator 
     } 

然後,它會只是看起來像:

start_shake.setOnClickListener { 
    AnimatorSet().apply { 
     play(shakeAnimator("rotation")).with(shakeAnimator("translate")) 
     start() 
    } 
} 

好方法名已經刪除了具有中間變量的需要進一步縮短代碼。