Android华容道之一步一步实现-2-图片分割
因为华容道是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);
}
}
除了显示图片之外,还绘制了几条边框线,为后面的华容道的实现打下外观基础。
实现后的效果如下图所示:
下一步