본문 바로가기
안드로이드

[안드로이드] ImageCache 사용 중, 이미지의 크기가 변하는 현상

by 호군 2013. 12. 13.
반응형

안드로이드에서는 이미지 캐시를 위한 라이브러리가 다양합니다.

아마 대표적인 라이브러리는 AUIL, Volley, Picasso 등이지 않을까 합니다.

이 라이브러리에 대해서 궁금하거나 각 라이브러리의 비교 정보를 원하시면, 여기에서 확인하세요.


저는 안드로이드 개발자 사이트에서 제공하는 BitmapFun프로젝트에 있는 이미지 캐시를 사용했습니다.

이 캐시는 이미지를 BitmapDrawable로 변환하여 메모리에 담아두고 있습니다.

그래서 최종적으로 ImageWorker에서  ImageView.setImageDrawable() 메소드를 사용해서 이미지를 설정합니다.


제가 겪은 문제는 ImageView가 동일한 BitmapDrawable을 사용함으로써 생기는 문제 입니다.

제가 발생한 단계를 아래에 적어보겠습니다.


A 액티비티와 B 액티비티가 있습니다. 그리고 이 두 액티비티에서 ImageView는 서로 크기가 다르고 ScaleType이 fitXY 입니다.

A 액티비티에서는 이미지 캐시로부터 a, c 이미지를 가져와서 보여줍니다.

그리고 버튼을 클릭해서 B 액티비티로 화면을 전환했습니다.

B 액티비티에서도 이미지 캐시로부터 b, c 이미지를 가져와서 보여줍니다.

BACK키를 눌러서 A 액티비티로 되돌아 옵니다.

A 액티비티에서는 c 이미지가 이전과 다른 크기로 보여지고 있습니다.


처음에 말한 것과 같이 이런 문제가 발생하는 이유는 두 ImageView가 동일한 BitmapDrawable을 사용했기 때문입니다.

A 액티비티에서 BitmapDrawable의 크기는 변경되었습니다.

B 액티비티에서 BitmapDrawable의 크기가 다시 변경되었습니다.

하지만 되돌아온 A 액티비티에서는 BitmapDrawable이 이전과 동일하기 때문에 BitmapDrawable의 크기를 변경하지 않습니다.


이 문제를 해결하는 방법은 이 BitmapDrawable을 설정하기 전에 ImageView의 이미지를 초기화 한 다음 이미지를 설정하면 됩니다. 즉, ImageView.setImageDrawable(null) 을 호출하거나, 로딩이미지나 기본 이미지로 설정해주면 이러한 문제가 발생하지 않습니다.



반응형