- package
com.clip; -
- import
android.content.Context; - import
android.graphics.Bitmap; - import
android.graphics.BitmapFactory; - import
android.graphics.Canvas; - import
android.graphics.Color; - import
android.view.SurfaceHolder; - import
android.view.SurfaceHolder.Callback; - import
android.view.SurfaceView; -
-
- public
class MyView extends SurfaceView implements Callback, Runnable { -
-
private Bitmap[] robotBmps = new Bitmap[12]; -
private int frameX; // 小图在大图中的x坐标 -
private int frameY; // 小图在大图中的y坐标 -
private int frameW; // 小图的宽度 -
private int frameH; // 小图的高度 -
private SurfaceHolder sh; -
private Canvas canvas; -
private int currFrame; // 当前绘制帧 -
private boolean flag; // 线程循环标识 -
-
public MyView(Context context) { -
super(context); -
-
sh = this.getHolder(); -
sh.addCallback(this); -
-
// 切割图片 -
Bitmap robot = BitmapFactory.decodeResource(getResources(), R.drawable.robot); -
frameW = robot.getWidth() / 6; -
frameH = robot.getHeight() / 2; -
-
for (int i = 0; i < robotBmps.length; i++) { -
frameX = (i % 6) * frameW; -
frameY = (i / 6) * frameH; -
robotBmps[i] = Bitmap.createBitmap(robot, frameX, frameY, frameW, frameH); -
} -
} -
-
private void logic() { -
currFrame++; -
if (currFrame >= 12) { -
currFrame = 0; -
} -
} -
-
private void drawFrame() { -
-
try { -
canvas = sh.lockCanvas(); -
canvas.drawColor(Color.BLACK); -
-
if (canvas != null) { -
// 绘制机器人 -
canvas.drawBitmap(robotBmps[currFrame], (this.getWidth() - frameW) / 2, (this.getHeight() - frameH) / 2, null); -
} -
} catch (Exception e) { -
e.printStackTrace(); -
} finally { -
if (canvas != null) { -
sh.unlockCanvasAndPost(canvas); -
} -
} -
} -
-
@Override -
public void surfaceCreated(SurfaceHolder holder) { -
flag = true; -
currFrame = 0; -
new Thread(this).start(); -
} -
-
@Override -
public void surfaceChanged(SurfaceHolder holder, int format, int width, -
int height) { -
// TODO Auto-generated method stub -
-
} -
-
@Override -
public void surfaceDestroyed(SurfaceHolder holder) { -
flag = false; -
} -
-
@Override -
public void run() { -
while (flag) { -
drawFrame(); -
logic(); -
try { -
Thread.sleep(100); -
} catch (InterruptedException e) { -
e.printStackTrace(); -
} -
} -
} - }
运行结果:
![将大图切割为小图片 将大图切割为小图片](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)