4

にはanimateLayoutChanges="true"があります。最初はそれは上品です。しかし、のビュー(BottomSheetView)のvisibilityGONEからVISIBLEに変更すると、アプリケーションが計算を駄目にし、BottomSheetViewが画面の上部に移動します。私はBottomSheetViewレイアウトのルートにlayout_gravity=bottomを設定しようとしました。しかし、成功はありません。animateLayoutChanges = BottomSheetViewの予期しない動作を示す「true」

ここでは、すべてのビューの表示を変更する前に私はBottomSheetViewというイメージを持っています。私はビュー(GONEからVISIBLEまたはVISIBLEからGONE)の可視性を変更する

enter image description here

後(フルサイズ用の画像をクリックして)、私のBottomSheetViewトップに移動します。ビューwidthheightの測定について計算しながら

enter image description here

私は推測し、Androidがめちゃくちゃにされた(フルサイズの画像をクリックしてください)。これを解決する方法は?

また、私のBottomSheetViewを親ビューと完全に一致させるようにしましたが、何とかBottomSheetViewheightが電話画面より長く、スクロールの問題が発生しています。

期待溶液:

1>ビューのvisibilityが変更された場合でも、その位置を変更することから防止BottomSheetView

OR

2>それは計算でめちゃくちゃにした後に悪く見えないようにBottomSheetViewマッチ親にします。

答えて

0

私は同じ問題を抱えていて、解決策を見つけることを決めました。私は根本的な原因を見つけることができましたが、残念ながら私は現時点で大きな修正を見ません。

原因: 問題は下部シートの動作とLayoutTransitionの間で発生します。 LayoutTransitionが作成されると、ビューにOnLayoutChangeListenerが作成され、endValuesを取得して適切な値を持つアニメーターを設定できるようになります。このOnLayoutChangeListenerは、最初にparent.onLayout(child)を呼び出すときにbottomSheetBehaviorのonLayout()呼び出しでトリガーされます。親は、後で動作が変更されるオフセットを無視して、通常どおりに子をレイアウトします。問題はここにあります。この時点でのビューの値は、OnLayoutChangeListenerによって取得され、アニメーターに格納されます。アニメーションが実行されると、ビヘイビアが定義する場所ではなく、これらの値にアニメートされます。残念ながら、LayoutTransitionクラスはアニメーターにアクセスして、最終値を更新することはできません。

修正: 現在、私はLayoutTransitionsを含む優雅な修正はありません。 LayoutTransitionのアニメーターにアクセスして更新するためのバグを提出します。今のところ、layoutTransition.setAnimateParentHierachy(false)を使用して、親コンテナのlayoutTransitionを無効にすることができます。次に、自分で変更をアニメートすることができます。できるだけ早く実際の例で私の答えを更新します。

1

BottomSheetBehaviorは今のところLayoutTransitionanimateLayoutChanges="true")とうまく動作しません。私は修正の作業を行います。

今のところTransitionを使用できます。このようなものは、内側のビューを消して、ボトムシートのサイズをアニメートします。

ViewGroup bottomSheet = ...; 
View hidingView = ...; 

TransitionManager.beginDelayedTransition(bottomSheet); 
hidingView.setVisibility(View.GONE); 

Applying a Transitionを参照すると、アニメーションのカスタマイズ方法などの詳細が表示されます。