创建自定义的类:
package com.surekam.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.view.KeyEvent;
import android.view.View;
public class GameView extends View implements Runnable {
// 声明Bitmap对象
Bitmap mBitQQ = null;
int BitQQwidth = 0;
int BitQQheight = 0;
float Angle = 0.0f;
// 构建Matrix对象
Matrix mMatrix = new Matrix();
public GameView(Context context) {
super(context);
// 装载资源
mBitQQ = ((BitmapDrawable)
getResources().getDrawable(R.drawable.icon))
.getBitmap();
// 得到图片的高度和宽度
BitQQwidth =
mBitQQ.getWidth();
BitQQheight =
mBitQQ.getHeight();
// 开启线程
new Thread(this).start();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 重置mMatrix对象
mMatrix.reset();
// 设置旋转
mMatrix.setRotate(Angle);
Bitmap mBitQQ2 =
Bitmap.createBitmap(mBitQQ, 0, 0, BitQQwidth,
BitQQheight,
mMatrix, true);
// 绘制旋转后的图片
GameView.drawImage(canvas,
mBitQQ2, (320 - BitQQwidth) / 2, 10);
mBitQQ2 = null;
}
// 按键按下事件
public boolean onKeyDown(int keyCode, KeyEvent
event) {
// 左方向键
if (keyCode ==
KeyEvent.KEYCODE_DPAD_LEFT) {
Angle--;
} else if (keyCode ==
KeyEvent.KEYCODE_DPAD_RIGHT) {
Angle++;
}
return true;
}
// 按键弹起事件
public boolean onKeyUp(int keyCode, KeyEvent
event) {
return true;
}
public boolean onKeyMultiple(int keyCode, int
repeatCount, KeyEvent event) {
return true;
}
// 线程处理
public void run() {
while
(!Thread.currentThread().isInterrupted()) {
try {
Thread.sleep(100);
} catch
(Exception e) {
Thread.currentThread().interrupt();
}
postInvalidate();
}
}
public static void drawImage(Canvas canvas,
Bitmap bitmap, int x, int y) {
// 绘制图像
canvas.drawBitmap(bitmap, x, y,
null);
}
}
在activity中调用:
package com.surekam.view;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
public class TestMatrixViewActivity extends Activity {
private GameView mGameView = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mGameView = new
GameView(this);
setContentView(mGameView);
}
public boolean onKeyUp(int keyCode, KeyEvent
event) {
super.onKeyUp(keyCode,
event);
return true;
}
public boolean onKeyDown(int keyCode, KeyEvent
event) {
return
mGameView.onKeyDown(keyCode, event);
}
}