How to fix “canvas: trying to use a recycled bitmap error”?

前端 未结 4 1633
轻奢々
轻奢々 2021-01-12 07:15

I\'m creating a RecyclerView to show a Grid of pictures. When selecting one of them, it should open a new activity with a transition.

I\'m using Glide l

相关标签:
4条回答
  • 2021-01-12 07:45

    I solved by adding this:

    Glide.with(activity).clear(view);
    

    before load the image:

    Glide.with(activity)
                    .load(imageUrl)
                    .apply(options)
                    .placeholder(R.drawable.loading_image)
                    .error(R.drawable.not_found)
                    .into(view);
    

    See docs:

    http://bumptech.github.io/glide/doc/resourcereuse.html

    http://bumptech.github.io/glide/doc/resourcereuse.html#cannot-draw-a-recycled-bitmap

    0 讨论(0)
  • 2021-01-12 07:54

    Move bitmap.recycle(); to another place in the code where this bitmap is really no longer needed.

    0 讨论(0)
  • 2021-01-12 07:57

    I don't know much about canvas (I don't use animations that often) but if you don't find any way to fix this, you could try using this library instead: https://github.com/codepath/android_guides/wiki/shared-element-activity-transition

    0 讨论(0)
  • 2021-01-12 08:02

    I suspect that once in a while your bitmap gets into the recycled state just before the Canvas gets a chance to draw onto it here drawable.draw(canvas);.

    A quick solution should be not to call bitmap.recycle();, which is not strictly required for android >2.3.3. If you still want to reclaim this memory forcefully, you'll have to find a way to check when the bitmap is indeed no longer needed (i.e., Canvas had a chance to finish its drawing operations).

    0 讨论(0)
提交回复
热议问题