画背景(棋盘)java android

时间:2011-08-14 00:24:08

标签: java android colors background

我是java和android的新手,但我正在寻找一个能够走上正确轨道的好教程。我想编写一个函数,将白色棋盘图案上的黑色绘制/重绘到我应用当前视图的背景。我不想使用实际图像,因为我希望能够重新调整resize事件的背景,等等。我想动态改变正方形的大小..

感谢您的帮助

5 个答案:

答案 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);

输出将是:

screen shot

希望它可以提供帮助。

答案 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数组,用画布绘制