将大图切割为小图片


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;

/**
* 切割图片并逐帧播放
* 将一张6*2的大图片切割成12张小图片
* @author zhouli
*
*/
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();
}
}
}
}

运行结果:

[img]http://dl.iteye.com/upload/attachment/0063/4723/bfc2d494-3cde-3a5f-b3c9-9d8367a68079.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值