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

先上代码:

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值