我是java和android的新手,但我正在寻找一个能够走上正确轨道的好教程。我想编写一个函数,将白色棋盘图案上的黑色绘制/重绘到我应用当前视图的背景。我不想使用实际图像,因为我希望能够重新调整resize事件的背景,等等。我想动态改变正方形的大小..
感谢您的帮助
答案 0 :(得分:7)
最有效的方法是使用包含棋盘图案的Bitmap(例如2x2正方形)并使用带有REPEAT图块模式的BitmapShader:
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);
答案 1 :(得分:4)
我需要这个并且需要它比提供我自己的位图资源更灵活。所以这是一个即时选项。
在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;
}
答案 2 :(得分:1)
我已经制作了一个自定义Drawable
,可以绘制背景棋盘,请参见此github回购-CheckerboardDrawable。
您可以像这样使用它:
yourView.setBackgroundDrawable(CheckerboardDrawable.create());
并且它是可定制的:
CheckerboardDrawable drawable = new CheckerboardDrawable.Builder()
.colorOdd(Color.LTGRAY)
.colorEven(Color.DKGRAY)
.size(20)
.build();
yourView.setBackgroundDrawable(drawable);
输出将是:
希望它可以提供帮助。
答案 3 :(得分:0)
科特琳(Kotlin),基于上述西蒙的答案,
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)
}
答案 4 :(得分:-6)
加载2张图片:黑白
从一个包含drawable和size
的类创建一个2d数组棋盘[8] [8]创建一个2d循环
for (i < 8)
for (j < 8)
draw with canvas (chessboard[i][j].drawable)
谷歌的关键词: 2d数组,用画布绘制