2014-09-01 32 views
1

我有一個Custom ViewGroup類和一個已添加到其中的圖像。當點擊屏幕時,我想要動畫添加的圖像以波浪形式穿過屏幕。我現在的東西是在下面,但儘管圖像以波浪形式移動,但它跳得太快,並且模糊不清。我怎樣才能放慢腳步,穩步前進?Android ValueAnimator Sin wave

ValueAnimator animator = ValueAnimator.ofFloat(0, 1); // values from 0 to 1 
    if(animateImage) { 
     incrementalValue = 0f; 
     animator.setDuration(4000); 
     animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
      @Override 
      public void onAnimationUpdate(ValueAnimator animation) { 
       float value = ((Float) (animation.getAnimatedValue())) 
         .floatValue(); 
       float amplitude = 100f; 
       mImage.setTranslationX(incrementalValue); 
       mImage.setTranslationY((float) (amplitude * Math.sin((incrementalValue) * Math.PI))); 
       incrementalValue += 5f; 
      } 
     }); 
     animator.setTarget(mImage); 
     animator.start(); 
    } 

回答

2

您在onAnimationUpdate聲明浮動value永不再使用它。圖像轉換的計算是mImage.setTranslationY((float) (amplitude * Math.sin((incrementalValue) * Math.PI)));。如果插入值並且incrementalValue(= 0)不更改,則此計算將始終返回0,因爲sin(0)= 0並且乘法中的一個使產品爲0.您應該爲incrementalValue插入animator.getAnimatedValue。此外,我建議你改變計算爲sin(animator.getAnimatedValue()*PI*2)這使得正弦波的波長爲1 sin(x*pi*2),並且圖像將在動畫的重複中上下移動一次,並且當動畫重新啓動時它不會跳躍。

注意你仍然可以乘以幅度使圖像移動一定的距離。

+0

謝謝你的作品太棒了!我改變了唯一的事情是mImage.setTranslationX(value + incrementalValue);而不是mImage.setTranslation(incrementalValue)。感謝您的時間和幫助! – user2687482 2014-09-01 20:54:38

+0

所以你想要圖像橫向和上下移動?順便說一句upvote:D – Gumbo 2014-09-01 21:00:48

+0

沒有在我的評論上面的setTranslationX語句圖像上下移動,但不會穿過屏幕。儘管它確實以一種正弦波形式運動。是的,你肯定會得到upvote :) – user2687482 2014-09-01 21:04:55