通过在Canvas中绘制使用Vector Drawable

mcf*_*oft 6 svg android canvas

  • 我有一个SVG导入我的项目作为Vector Drawable.
  • 我有我的自定义视图

我知道如何使用ImageView按代码显示矢量drawable(http://www.androidhive.info/2017/02/android-working-svg-vector-drawables/),这在几篇文章中有描述,但是:

如何使用我的自定义视图和使用画布的代码绘制矢量?这可能吗?如果是这样,有人可以给我一个提示.

Kri*_*hna 2

为此,您需要将矢量转换为位图,如下所示:

private fun getVectorBitmap(context: Context, drawableId: Int): Bitmap? {

    var bitmap: Bitmap? = null

    when (val drawable = ContextCompat.getDrawable(context, drawableId)) {

        is BitmapDrawable -> {
            bitmap = drawable.bitmap
        }

        is VectorDrawable -> {

            bitmap = Bitmap.createBitmap(
                drawable.intrinsicWidth,
                drawable.intrinsicHeight, Bitmap.Config.ARGB_8888
            )
            
            val canvas = Canvas(bitmap)
            drawable.setBounds(0, 0, canvas.width, canvas.height)
            drawable.draw(canvas)

        }
    }

    return bitmap
}     
Run Code Online (Sandbox Code Playgroud)

然后您可以在画布上正常使用矢量作为位图:

  canvas?.drawBitmap(getVectorBitmap(context, R.drawable.ic_icon), 500f, 500f, canvasPaint)
Run Code Online (Sandbox Code Playgroud)