ImageView와 관련하여 아래와 같은 런타임 오류가 발생할 때가 있다.
java.lang.RuntimeException: Canvas: trying to draw too large(110250000bytes) bitmap.
로그에서 설명해주듯이
발생 원인은 이미지가 너무 커서
앱이 구동된 환경의 캔버스에서 못 그리겠다는 것이다.
해결 방법은 4가지다.
1. 이미지 사이즈를 줄여서 교체한다.
- 본인은 가급적 이 방법을 사용한다.
- 특별한 상황이 아니라면 앱 용량도 줄어들고 효율적이기 때문에 이미지 크기를 줄이는 방법을 추천한다.
2. 고해상도 전용 drawable-xxhdpi 혹은 drawable-xxxhdpi 폴더로 이미지를 옮긴다.
- 기본 drawable 폴더는 mdpi 해상도의 이미지를 보관하고,
- 해상도별로 별도의 폴더에 이미지를 보관하는게 권고되는 듯 하다.
- StackOverflow의 관련 답변 참고: https://stackoverflow.com/questions/40835514/android-canvas-drawing-too-large-bitmap
3. Android manifest 파일에서 하드웨어 가속 속성을 false로 준다.
- application 전역에서 하드웨어 가속을 false 설정해도 되고, 특정 activity에만 설정해도 된다.
- 근데 체감상(?) 애니메이션 등의 작업이 느려지는 느낌이 든다.(상황에 맞게 사용하자)
<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="false" />
</application>
- 하드웨어 가속에 대한 자세한 내용은 레퍼런스 참고: https://developer.android.com/guide/topics/graphics/hardware-accel
4. Glide 등의 외부 라이브러리를 사용한다.
- 자세한 사용 방법은 생략.
'개발(Development) > Android(안드로이드)' 카테고리의 다른 글
[안드로이드] 커스텀 RadioButton 만드는 방법(배경, 테두리, 이미지 적용) (0) | 2021.08.02 |
---|---|
[안드로이드] strings.xml 텍스트 줄바꿈(개행 처리), 공백 추가 방법: TextView (0) | 2021.08.01 |
[안드로이드] ImageView가 높이 전체를 차지할 때 비율 조정 방법: adjustViewBounds (0) | 2021.07.31 |
[안드로이드] Admob 광고단위(배너 등) 추가 생성/수정/삭제 방법 (0) | 2021.07.24 |
[안드로이드] Admob 앱 추가 등록 및 설정 방법 (앱ID 생성) (0) | 2021.07.24 |
댓글