Android Canvas如何设置透明背景?像素风格背景是否用Bitmap?
Android Canvas像素风格透明背景实现方案
这种像素风格的透明背景可以通过Bitmap实现,这是一种直观且高效的常用方案,具体实现思路如下:
生成小尺寸棋盘格Bitmap
创建一个小尺寸的Bitmap(比如8x8像素),交替绘制浅灰色块和透明块,模拟图中的像素棋盘效果。这个小Bitmap作为重复单元,后续可铺满整个画布。利用BitmapShader实现平铺
将生成的小Bitmap转为BitmapShader,并设置TileMode.REPEAT的重复模式,Shader会自动将小Bitmap铺满整个Canvas区域。在Canvas上绘制背景
在自定义View的onDraw方法中,先使用带Shader的Paint绘制覆盖整个画布的矩形,再绘制上层的其他内容。
示例代码(Kotlin):
// 生成像素棋盘格Bitmap private fun createCheckerboardBitmap(cellSize: Int): Bitmap { val bitmap = Bitmap.createBitmap(cellSize, cellSize, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) val paint = Paint(Paint.ANTI_ALIAS_FLAG) // 绘制浅灰色块 paint.color = Color.parseColor("#E5E5E5") canvas.drawRect(0f, 0f, cellSize/2f, cellSize/2f, paint) canvas.drawRect(cellSize/2f, cellSize/2f, cellSize.toFloat(), cellSize.toFloat(), paint) // 绘制透明块(也可替换为更浅的灰色) paint.color = Color.TRANSPARENT canvas.drawRect(cellSize/2f, 0f, cellSize.toFloat(), cellSize/2f, paint) canvas.drawRect(0f, cellSize/2f, cellSize/2f, cellSize.toFloat(), paint) return bitmap } // 在自定义View的onDraw中使用 override fun onDraw(canvas: Canvas) { super.onDraw(canvas) val checkerboardBitmap = createCheckerboardBitmap(8) val shader = BitmapShader(checkerboardBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT) val backgroundPaint = Paint().apply { this.shader = shader } // 绘制铺满画布的背景 canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), backgroundPaint) // 绘制你的其他内容... }
补充:除了Bitmap方案,也可以直接在Canvas上循环绘制小矩形实现,但Bitmap+Shader的方式性能更优,尤其是在画布尺寸较大时,避免了逐帧重复绘制大量小图形的开销。
内容的提问来源于stack exchange,提问作者Akbar Sukku
相关产品推荐
相关产品推荐

