先上代码:
package Android.App.chapter05;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements Callback, Runnable {
private Bitmap pic ;
private Matrix matrix = null ;
public SurfaceHolder sfh = null ;
public Paint paint = null ;
public Canvas canvas = null ;
public int pic_w ,pic_h ;
public float angle = 0.0f;
public Context context ;
public MySurfaceView(Context context) {
super(context);
this.context =context ;
//这里先前一直得到的是一个空值。解决办法是将默认的drawable去掉了后改成了一个drawable或者新建一个raw文件存放图片资源
pic = ((BitmapDrawable) context.getResources().getDrawable(R.drawable.qq)).getBitmap();
matrix = new Matrix() ;
sfh = getHolder() ;
sfh.addCallback(this);
paint = new Paint();
//paint.setStyle(Style.STROKE); //这里表面设置的是空心在清屏的时候要去掉
pic_w = pic.getWidth() ;
pic_h = pic.getHeight() ;
}
public void paint() {
super.onDraw(canvas);
canvas = sfh.lockCanvas() ;
paint.setColor(Color.RED);
canvas.drawRect(0, 0, getWidth(),getHeight(), paint);
matrix.reset() ;
matrix.setRotate(angle);
Bitmap pic2 = Bitmap.createBitmap(pic, 0, 0, pic_w, pic_h,matrix , true);
canvas.drawBitmap(pic2,(320-pic_w)/2, 10 , paint);
pic2 = null ;
sfh.unlockCanvasAndPost(canvas);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
angle --;
}
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
angle ++;
}
return true;
}
@SuppressWarnings("static-access")
public void run() {
while(!Thread.currentThread().interrupted())
{
paint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void surfaceCreated(SurfaceHolder holder) {
new Thread(this).start() ;
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
问题就在注释的地方了!
然后在activity中调用这个类显示,并给出按键处理!
package Android.App.chapter05;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
public class AndroidApp extends Activity {
MySurfaceView view ;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = new MySurfaceView(this) ;
setContentView(view);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
return false ;
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (view == null) {
return false ;
}
else {
view.onKeyDown(keyCode, event) ;
}
return true;
}
}
图片就不上了,就是一个点击左右键然后图片旋转案例!