4

animateLayoutChanges="true"이 있습니다. 처음에는 잘 나타납니다. 그러나 에서 visibility의보기 (BottomSheetView)를 변경하면 계산이 엉망이며 화면 상단으로 이동합니다. 나는 BottomSheetView 레이아웃의 루트에 layout_gravity=bottom 설정을 시도했다. 그러나 성공하지 못했습니다.animateLayoutChanges = BottomSheetView에서 예기치 않은 동작을 나타내는 "true"

보기의 가시성을 변경하기 전에 BottomSheetView이라는 이미지가 있습니다. 나는 (GONEVISIBLE 또는 VISIBLEGONE) 뷰의 가시성을 변경 한 후 상단에, 내 BottomSheetView 이동을

enter image description here

을 (전체 크기 이미지를 클릭). 보기 widthheight의 측정에 대한 계산을하는 동안

enter image description here

것 같아요, 안드로이드는 엉망입니다 (전체 크기 이미지를 클릭). 이 문제를 해결할 수있는 방법은 무엇입니까 ??

또한 BottomSheetView를 상위 뷰와 완전히 일치 시키려고했지만 은 BottomSheetView으로 전화 화면보다 길어서 스크롤 문제가 발생합니다.

예상 솔루션 :

1> 도면의 visibility 변경시에도 그 위치를 변경하지 못하도록 방지 BottomSheetView. 이 계산에 엉망 후 나쁜 보이지 않도록

또는

2

>는 BottomSheetView 매치 부모를합니다.

답변

0

동일한 문제가 발생하여 수정 사항을 찾기로했습니다. 근본 원인을 찾을 수 있었지만 불행히도 지금은 큰 문제가 발생하지 않습니다.

원인 : 문제는 바닥 시트 동작과 LayoutTransition간에 발생합니다. LayoutTransition을 만들면 endValues를 캡처하고 적절한 값으로 애니메이터를 설정할 수 있도록보기에 OnLayoutChangeListener를 만듭니다. 이 OnLayoutChangeListener는 처음에 parent.onLayout(child)을 호출 할 때 bottomSheetBehavior의 onLayout() 호출에서 트리거됩니다. 부모는 그 행동이 나중에 변경 될 오프셋을 무시하고 정상적으로 자식을 레이아웃합니다. 여기에 문제가 있습니다. 이 시점에서 뷰의 값은 OnLayoutChangeListener에 의해 캡처되어 애니메이터에 저장됩니다. 애니메이션이 실행되면 비헤이비어가 정의하는 위치가 아닌이 값으로 애니메이션이 적용됩니다. 안타깝게도 LayoutTransition 클래스는 애니메이터에 대한 액세스 권한을 제공하지 않으므로 최종 값을 업데이트 할 수 있습니다.

수정 : 현재 LayoutTransitions와 관련된 멋진 수정 사항이 없습니다. LayoutTransition 애니메이터에 액세스하고 업데이트하는 방법에 대한 버그를 제출할 것입니다. 지금은 layoutTransition.setAnimateParentHierachy(false)을 사용하여 상위 컨테이너의 layoutTransition을 비활성화 할 수 있습니다. 그런 다음 변경 사항을 직접 애니메이션으로 적용 할 수 있습니다. 가능한 한 빨리 실례로 답변을 업데이트하겠습니다.

1

BottomSheetBehavior가 LayoutTransition (animateLayoutChanges="true")과 잘 작동하지 않습니다. 나는 고치기 위해 일할 것이다.

지금은 Transition을 사용할 수 있습니다. 이런 식으로 내부의보기가 희미 해지고 하단 시트의 크기가 애니메이션됩니다.

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

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

당신은 애니메이션을 사용자 지정하는 방법을 포함한 자세한 정보는 Applying a Transition를 참조 할 수 있습니다.

관련 문제