본문 바로가기
프로그래밍/Android

[Android] View.Gone을 해도 잔상이 남아있을때

by Youngs_ 2022. 3. 2.
<frameLayout android:id="@+id/layoutTop">
	<frameLayout android:id="@+id/frameLayout_Detail"/>
</frameLayout>
<scrollView android:id"@+id/scrollview/>

위와같은 구조에서 frameLayout을 숨기려고 할때

binding.frameLayout.visibility = View.GONE

특정버튼을 누르면 frameLayout_Detail이 확장된다.
frameLayout_Detail을 숨길때 위와같은 코드를 사용해서 일부분을 보이지 않게 했는데 아래와같은 현상이 일어났다.

1. scrollview에 숨긴 frameLayout_Detail의 일부분이 그대로 남아있다.
2. frameLayout_Detail안에있는 버튼등을 클릭해도 아무런 이벤트도 일어나지 않는다.
3. layoutTop에 있는 버튼이나 라디오박스등을 클릭하면 frameLayout_Detail이 제대로 숨겨진다.

마치 잔상처럼 해당 부분이 사라지지 않는데, 그럴때는 아래와같은 코드를 이용해 UI를 새로 그리면된다.

binding.scroll.postInvalidate()

scroll을 새로 그려주어서 실제로는 사라졌지만 잔상이 남아있는 부분을 없애서 해결했다.

invalidate와 postInvalidate의 차이는

invalidate는 UI Thread에서만 사용할수있고 그외의 Thread에서는 postInvalidate를 사용해야한다.

댓글