因爲華容道是16個格子,所以要把一張大一點的圖片分割成16個相等的小圖片。
可以使用Bitmap.createBitmap方法來進行。
直接上代碼
ori_bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.koala);
原始圖片
下面對原始圖片進行切分,分爲16張
ori_bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.koala);
int width = ori_bitmap.getWidth();
int height = ori_bitmap.getHeight();
int new_width = width / 4;
int new_height = height /4;
Matrix matrix = new Matrix();
matrix.postScale(0.5f,0.5f);
bitmap_width = new_width /2;
bitmap_height = new_height /2;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
bitmaps[i*4+j] = Bitmap.createBitmap(ori_bitmap,new_width * j,new_height *i , new_width, new_height,matrix,true);
}
}
顯示分割後的圖片
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
//canvas.drawColor(Color.RED);
paint.setStrokeWidth((float) 5.0);
int offset_x = 100;
int offset_y = 100;
for (int i = 0; i < 4; i++) {
int x = offset_x ;
int y = offset_y + bitmap_height * i;
for (int j = 0; j < 4; j++)
{
Bitmap bitmap = bitmaps[i*4+j];
int x_1 = offset_x + j*bitmap.getWidth();
int y_1 = offset_y+i * bitmap.getHeight();
canvas.drawBitmap(bitmap, x_1 ,y_1 , paint);
canvas.drawLine(x_1, y_1, x_1, y_1+ bitmap_height, paint);
}
canvas.drawLine(x, y, x + bitmap_width * 4, y, paint);
}
}
除了顯示圖片之外,還繪製了幾條邊框線,爲後面的華容道的實現打下外觀基礎。
實現後的效果如下圖所示: