개발을 진행하다 보면 특정 상황에 따라서 화면 전체가 아닌 특정 뷰에 대한 업데이트를 진행해야 할 경우가 종종 발생합니다.

Android에서 UI 업데이트를 수행할 때, requestLayout() 및 invalidate() 메서드가 사용됩니다. 이 두 메서드는 UI 업데이트를 수행할 때 사용되지만, 각각 다른 방식으로 동작합니다.

requestLayout()

requestLayout() 메서드는 View의 레이아웃을 갱신하기 위해 호출됩니다. 즉, View의 크기나 위치가 변경되었을 때 호출됩니다. 이 메서드는 View의 크기나 위치가 변경되면 View의 부모 ViewGroup에게 레이아웃 갱신을 요청합니다. 그리고 ViewGroup이 다시 자식 View의 크기와 위치를 계산하여 레이아웃을 다시 그립니다. 따라서, requestLayout() 메서드는 View의 레이아웃을 갱신하고 다시 그리는 데 사용됩니다.

invalidate()

invalidate() 메서드는 View의 내용을 다시 그리기 위해 호출됩니다. View가 그려질 때, 시스템은 View의 onDraw() 메서드를 호출하여 View의 내용을 그립니다. invalidate() 메서드는 View의 onDraw() 메서드를 다시 호출하여 View의 내용을 다시 그리도록 요청합니다. 따라서, invalidate() 메서드는 View의 내용을 갱신하고 다시 그리는 데 사용됩니다.

결론

requestLayout() 및 invalidate() 메서드는 UI 업데이트를 수행하는 데 사용됩니다. requestLayout() 메서드는 View의 레이아웃을 갱신하고, invalidate() 메서드는 View의 내용을 다시 그리기 위해 사용됩니다. 따라서, 이 두 메서드를 올바르게 사용하여 UI 업데이트를 수행하는 것이 중요합니다.

invalidate()는 View의 내용이 변경되는 사항에 주로 적용합니다.

  • 배경색
  • 내용

requestLayout()는 View의 크기나 위치가 변경되었을때 주로 사용합니다.

  • 특정 이벤트로 wrap_content로 되어있는 recyclerview의 높이가 변경될때
  • 이벤트 이후 뷰의 위치가 이동되어야할때
profile
러닝커브를 따라서 등반중입니다.

0개의 댓글