마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

뷰플리퍼에 이미지뷰 관련질문입니다.

0 추천

현재 뷰플리퍼 코드를 작성하고 있는데요

이전, 다음 버튼을 누르면 각각 순서에 따라서 이미지뷰의 이미지를 보여주는 기능을 테스트중입니다.

텍스트는 구현이 되었는데, 텍스트 대신 이미지뷰를 넣으면

로그캣에서 오류를 뱉어서 질문드립니다 ㅠㅠ

해결 방법이나 다른 방법이 있다면 조언 부탁드립니다 ㅠ 감사합니다.

 

logcat

2020-12-23 09:02:07.394 21494-21494/? E/Zygote: isWhitelistProcess - Process is Whitelisted
2020-12-23 09:02:07.394 21494-21494/? E/libpersona: scanKnoxPersonas
2020-12-23 09:02:07.394 21494-21494/? E/libpersona: Couldn't open the File - /data/system/users/0/personalist.xml - No such file or directory
2020-12-23 09:02:14.202 21494-21494/com.example.flippertest2 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.flippertest2, PID: 21494
    java.lang.RuntimeException: Canvas: trying to draw too large(404750336bytes) bitmap.
        at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:229)
        at android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:97)
        at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:529)
        at android.widget.ImageView.onDraw(ImageView.java:1367)
        at android.view.View.draw(View.java:20373)
        at android.view.View.updateDisplayListIfDirty(View.java:19318)
        at android.view.View.draw(View.java:20096)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
        at android.view.View.updateDisplayListIfDirty(View.java:19309)
        at android.view.View.draw(View.java:20096)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
        at android.view.View.updateDisplayListIfDirty(View.java:19309)
        at android.view.View.draw(View.java:20096)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
        at android.view.View.updateDisplayListIfDirty(View.java:19309)
        at android.view.View.draw(View.java:20096)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
        at android.view.View.updateDisplayListIfDirty(View.java:19309)
        at android.view.View.draw(View.java:20096)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
        at android.view.View.draw(View.java:20376)
        at com.android.internal.policy.DecorView.draw(DecorView.java:980)
        at android.view.View.updateDisplayListIfDirty(View.java:19318)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:686)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:692)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:800)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:3496)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3283)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2818)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1780)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7827)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
        at android.view.Choreographer.doCallbacks(Choreographer.java:723)
        at android.view.Choreographer.doFrame(Choreographer.java:658)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

 

개발뉴비 (650 포인트) 님이 2020년 12월 23일 질문

1개의 답변

0 추천
 
채택된 답변
로그에 너무 큰 이미지를 그리려고 했기 때문에 에러가 났네요. 원본 이미지의 크기가 405MB 입니다. 원본이미지를 그냥 사용하지마시고 스케일 다운하신 다음에 사용하셔야 합니다. 직접 처리하기가 번거로우시면 Glide같은 라이브러리를 사용하시면 됩니다.

안드로이드 개발자 문서에도 이미지 사이즈를 줄이는 방법이 나옵니다.

https://developer.android.com/topic/performance/graphics/load-bitmap

그리고 원본 이미지도 가능하다면 사이즈가 작은 이미지를 사용하시면 더 좋습니다. webp 같은 게 지원된다면 훨씬 좋을 겁니다.
spark (227,530 포인트) 님이 2020년 12월 23일 답변
개발뉴비님이 2020년 12월 23일 채택됨
와.. 이미지 용량은 생각을 못하고 있었어요. 답변 감사합니다
...