2017-06-09 4 views
0

私は下のシートをスクロールするユーザーに基づいていくつかのビューのY位置をスムーズにアニメーションしたいと思います。ビューの翻訳をアニメーションにするYボトムシートのスクロール

http://imgur.com/dVBlh83

アニメーションが少しぎくしゃくですが。
これは、ボトムシートをスクロールすると、ある間隔で私にslideOffsetが与えられます。これは、現在行っているようにsetTranlationYにはあまりにも少ないことです。

これを行うより良い方法はありますか?

ボトムシートコールバック

BottomSheetBehavior.BottomSheetCallback() { 

     @Override public void onSlide(@NonNull View bottomSheetView, float slideOffset) { 
      int offset = (int) (slideOffset * 100); 
      if (offset > 0) { 
       scrollingHeaderView.animate(offset); 
      } 
     } 
    }); 

scrollingHeaderView

public void animate(int offset) { 
    position = -(offset/2); 
    arrow.setTranslationY(offset * ANIMATION_RATIO_ARROW); 
    detailView.setTranslationY(offset * ANIMATION_RATIO); 
} 

私は各ステップで小さなアニメーションの多くを作成するためにObjectAnimatorを使用して試してみました。

ObjectAnimator.ofFloat(arrow, "translationY", arrow.getTranslationY(), position * ANIMATION_RATIO_ARROW).start(); 

答えて

0

他の人に役立つ場合に備えてください。私はもっ​​と良く見えました。

まず、私が得ようとしている値のピクセル*範囲で比率を設定します。 、私はビューが、私はまた、リセット方法を必要とtranslationY

arrow.setTranslationY(position * arrowScale); 
detailView.setTranslationY(position * containerScale); 

を使用して、この設定値の変更に応じて、その後

private static int ANIMATION_RANGE = 100; 
arrowScale = -(getResources().getDimensionPixelOffset(R.dimen.arrow_distance)/ANIMATION_RANGE); 
containerScale = -(getResources().getDimensionPixelOffset(R.dimen.detail_distance)/ANIMATION_RANGE); 

を移動したいDPによってMutliplied> 100 - だから、オフセットは0になります元の位置にアニメーションを戻します。

public void reset() { 
    arrow.animate().setDuration(100).translationY(0); 
    detailView.animate().setDuration(100).translationY(0); 
} 
関連する問題