You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:05:30