Doodle 图片涂鸦库使用的一些注意事项

Doodle开源库地址

Doodle 图片涂鸦库 Github

在绘制完成后,获取涂鸦的绘制,不带底图的方法

Issues#70 在绘制完成后,是否可以只获取涂鸦的绘制,不带底图的方法

1
2
3
4
5
6
7
8
9
10
// 使用原图的宽高信息创建一个大小一致的空的 Bitmap
val newBitmap = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(newBitmap)
val paint = Paint()
// 设置画笔的颜色
paint.color = Color.BLACK
// 将设置的背景绘制到画布上
canvas.drawRect(0f, 0f, bitmap.width.toFloat(), bitmap.height.toFloat(), paint)
// 获取 DoodleView 的涂鸦集合并绘制到画布上
mDoodleView.allItem.forEach { it.draw(canvas) }

涂鸦完成后,调用 save 方法后再次涂鸦时导致崩溃的问题

Issues#72 java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@e5f2cdd

堆栈信息如下

1
2
3
4
5
6
7
8
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@e5f2cdd
at android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:55)
at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:226)
at android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:78)
at cn.hzw.doodle.DoodleView$b.a(DoodleView.java:9)
at cn.hzw.doodle.DoodleView$b.onDraw(DoodleView.java:5)
at android.view.View.draw(View.java:19384)
at android.view.View.updateDisplayListIfDirty(View.java:18320)

需要在 onSaved 回调里调用 callback 参数的 run 方法,如下所示

1
2
3
4
5
6
7
8
9
10
11
val doodleView = DoodleView(this, bitmap, doodleParams.mOptimizeDrawing, object : IDoodleListener {

override fun onReady(doodle: IDode?) {

}

override fun onSaved(doodle: IDode?, doodleBitmap: Bitmap?, callback: Runnable?) {
callback?.run()
// Do something.
}
})

如果对你有帮助的话,欢迎一键三连+关注哦~


Doodle 图片涂鸦库使用的一些注意事项
https://blog.funkt.cn/2023/08/03/1687059877495758849/
作者
anjiemo
发布于
2023年8月3日
许可协议
未经作者授权,禁止转载