私のアプリケーションでは、(サポートライブラリの)ボトムシートを使用しています。今、私は、シートが上にドラッグされている間、レイアウトの変更をアニメートしたいと思います。このために私は(これはnormalyこのcalssで使用されているすべてのオブジェクトがここに初期化されているそうではない断片の内部クラスです)BottomSheetCallback
のサブクラスを作成しました:ボトムシートのアニメーションレイアウト変更
public class MyBehavior extends BottomSheetBehavior.BottomSheetCallback {
Transition transition;
float lastOffset = 0;
Scene scene;
public PlayerBehavior() {
TransitionInflater inflater = TransitionInflater.from(getContext());
transition = inflater.inflateTransition(R.transition.player);
//transition.setDuration(300);
scene = fullLayout;
transition.setInterpolator(new Interpolator() {
@Override
public float getInterpolation(float v) {
return lastOffset;
}
});
}
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if(newState == BottomSheetBehavior.STATE_DRAGGING) {
TransitionManager.go(scene, transition);
}
}
@Override
public void onSlide(View bottomSheet, final float slideOffset) {
scene = (slideOffset > lastOffset) ? smallLayout : fullLayout;
lastOffset = slideOffset;
}
}
私はまた異なるから2 Scene
を作成する見ることができるようにレイアウトファイルとカスタムTransition
を使用してTransitionManager
のシーン間でアニメーションを作成します。私の問題は、Transition
はslideOffset
パラメータ(0-1の範囲)に基づいているべきですが、TransitionManager
は、通常はAndroidで時間ベースであるバックグラウンドでAnimation
クラスを使用しています。
カスタムインターポレーターを作成しようとしましたが、これは正しく機能しません。ですから、外部変数に基づいており、時間通りではなく、Transition
をどのように作成できますか?
視覚的な例がありますか。例えばスクリーンショット? –
私はそれが可能ではないと思います。 BottomSheetオフセットは-1から1までの値を持ち、常に0と1または-1と0の間でバウンスするとは限りません。場合によっては、0.3から始まり1.0fまで上がる場合もあります。私は過去に同じ問題を抱えていました。私は時間に基づいて状態変化のイベントをアニメートする必要がありました。 –
必要なアニメーションの種類。 – Khemraj