android-->图像旋转遇到的问题

来源:互联网 发布:知乎引流 编辑:程序博客网 时间:2024/04/29 06:34

先上代码:

   

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;    }}


图片就不上了,就是一个点击左右键然后图片旋转案例!

原创粉丝点击