我对Java和Android还比较陌生,但我正在寻找一份好的教程来帮助我入门。我想编写一个函数,以在应用程序的当前视图背景中绘制/重绘黑白棋盘格图案。我不想使用实际的图像,因为我想能够在重新调整大小等事件上重新绘制背景,并且我想动态更改正方形的大小。
感谢您的任何帮助。
感谢您的任何帮助。
最有效的方法是使用一个包含棋盘格图案(例如2x2个正方形)的位图,并使用REPEAT平铺模式的位图着色器:
BitmapShader shader = new BitmapShader(bitmapTemplate, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
Paint paint = new Paint();
paint.setShader(shader);
// in your draw method
canvas.drawRect(x, y, width, height, paint);
我需要这个功能,并且希望它比提供自己的位图资源更加灵活。因此,这里有一个即时生成的选项。
在您的onCreate()或构造方法中调用此方法并保存画笔。然后在onDraw()中的填充操作中简单地使用该画笔。
private Paint createCheckerBoard(int pixelSize)
{
Bitmap bitmap = Bitmap.createBitmap(pixelSize * 2, pixelSize * 2, Bitmap.Config.ARGB_8888);
Paint fill = new Paint(Paint.ANTI_ALIAS_FLAG);
fill.setStyle(Paint.Style.FILL);
fill.setColor(0x22000000);
Canvas canvas = new Canvas(bitmap);
Rect rect = new Rect(0, 0, pixelSize, pixelSize);
canvas.drawRect(rect, fill);
rect.offset(pixelSize, pixelSize);
canvas.drawRect(rect, fill);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setShader(new BitmapShader(bitmap, BitmapShader.TileMode.REPEAT, BitmapShader.TileMode.REPEAT));
return paint;
}
yourView.setBackgroundDrawable(CheckerboardDrawable.create());
并且它是可定制的:
CheckerboardDrawable drawable = new CheckerboardDrawable.Builder()
.colorOdd(Color.LTGRAY)
.colorEven(Color.DKGRAY)
.size(20)
.build();
yourView.setBackgroundDrawable(drawable);
Kotlin,基于上面Simon的答案,
fun createCheckerBoard(tileSize: Int) = Paint(Paint.ANTI_ALIAS_FLAG).apply {
shader = BitmapShader(Bitmap.createBitmap(tileSize * 2, tileSize * 2, Bitmap.Config.ARGB_8888).apply {
Canvas(this).apply {
val fill = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.FILL; color = 0x22000000 }
drawRect(0f, 0f, tileSize.toFloat(), tileSize.toFloat(), fill)
drawRect(tileSize.toFloat(), tileSize.toFloat(), tileSize * 2f, tileSize * 2f, fill)
}
}, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT)
}
加载2张图片:黑色和白色
使用一个类创建包含可绘制和大小的2D数组棋盘[8][8]
创建一个2D循环
for (i < 8)
for (j < 8)
draw with canvas (chessboard[i][j].drawable)
以下是你可以在谷歌上搜索的关键词: 2D 数组,使用画布进行绘图
x
和y
是会变化的。看起来非常奇怪,背景不随矩形移动,它只是停留在原地。如何解决这个问题? - Adam Stelmaszczyk