2

ObjectAnimator(左→右→左)を使用してHorizontalScrollViewをスクロールしています。したがって、結果は、ある側から別の側への無限のスクロールのようなものでなければなりません。ObjectAnimatorの2回目の起動前にデフォルトの遅延を削除します

問題は、右から左にアニメーションを開始してから1秒ほど遅れることです。このような行動を引き起こす原因は何ですか?

私は2つのアニメーションを作成し、(あなたがを高く評価していますよりよい解決策を知っていれば)を次々に開始しました:

final ObjectAnimator animRight = ObjectAnimator.ofInt(hScrollView, "scrollX", hScrollView.getRight()); 
animRight.setDuration(SCROLL_DURATION); 

final ObjectAnimator animLeft = ObjectAnimator.ofInt(hScrollView, "scrollX", 0); 
animLeft.setDuration(SCROLL_DURATION); 

animRight.addListener(new Animator.AnimatorListener() { 
    @Override 
    public void onAnimationStart(Animator animation) {} 

    @Override 
    public void onAnimationEnd(Animator animation) { 
     animLeft.start(); 
    } 

    @Override 
    public void onAnimationCancel(Animator animation) {} 

    @Override 
    public void onAnimationRepeat(Animator animation) {} 
}); 

animLeft.addListener(new Animator.AnimatorListener() { 
    @Override 
    public void onAnimationStart(Animator animation) {} 

    @Override 
    public void onAnimationEnd(Animator animation) { 
     animRight.start(); //delay occurs here 
    } 

    @Override 
    public void onAnimationCancel(Animator animation) {} 

    @Override 
    public void onAnimationRepeat(Animator animation) {} 
}); 

animRight.start(); 
+0

は 'ObjectAnimator'^Fリピート – pskink

+0

いやのドキュメントを参照してください、私は繰り返し知っています。しかし、アニメーションのフルパスを構築するには問題があります。つまり、右 - 右 - 右であるため、滑らかでなければなりません。 – AnZ

+0

ちょうど 'CycleInterpolator'のような右のインターポレータを使用します。 – pskink

答えて

1

はあなたのアニメーションに線形補間を適用しようとしたことがありますか?

デフォルトのインターポレータは線形ではないため、遅延の原因となる可能性があります。それを適用するには:

animRight.setInterpolator(new LinearInterpolator()); 
animLeft.setInterpolator(new LinearInterpolator()); 
+0

が適用されます。スクロールは前と同じように加速されなくなりましたが、遅延はまだ存在します – AnZ

関連する問題