Android开发 SurfaceView上新建线程绘制旋转图片 及 刷新特定区域(脏矩形)

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

何为脏矩形?比如surfaceview上绘制旋转图片的时候,只刷新一个特定的矩形区域就可以了。这个矩形区域就是脏矩形。在surfaceview上  canvas = holder.lockCanvas(new Rect(0, 0, 130, 130)); //获取画布 像这种带rect参数的就是脏矩形的刷新。

请看源码:

package yan.guoqi.rectphoto;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PixelFormat;import android.graphics.Rect;import android.util.AttributeSet;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;public class DrawSurfaceView extends SurfaceView implements SurfaceHolder.Callbackprivate static final String tag2 = "DrawSV"private boolean runFlag = trueprotected SurfaceHolder holder; private Bitmap rotateImg; private Thread myThread;  public DrawSurfaceView(Context context, AttributeSet attrs) //构造函数 {  super(context, attrs);  // TODO Auto-generated constructor stub  rotateImg = BitmapFactory.decodeResource(getResources(), R.drawable.rotate_circle);  rotateImg = Bitmap.createScaledBitmap(rotateImg, 100, 100, true);  holder = this.getHolder();  holder.addCallback(this);  holder.setFormat(PixelFormat.TRANSPARENT);  //顶层绘制SurfaceView设成透明  this.setZOrderOnTop(true);  myThread = new Thread(new MyThread()); } public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {  // TODO Auto-generated method stub  Log.v(tag2, "DrawSV:surfaceChanged...");   } public void surfaceCreated(SurfaceHolder arg0) {  // TODO Auto-generated method stub  Log.v(tag2, "DrawSV:surfaceCreated...");  //启动自定义线程    myThread.start();   } public void surfaceDestroyed(SurfaceHolder arg0) {  // TODO Auto-generated method stub  Log.v(tag2, "DrawSV:surfaceDestroyed...");  //终止自定义线程  runFlag = false;  myThread.interrupt();   }  /*自定义线程*/ class MyThread implements Runnable{  public void run() {   // TODO Auto-generated method stub      Canvas canvas = null;   int rotate = 0;   while(runFlag){    try {     canvas = holder.lockCanvas(new Rect(0, 0, 130, 130)); //获取画布     Paint paint = new Paint();     //canvas.drawBitmap(rotateImg, 0, 0, paint); //绘制旋转的背景     //创建矩阵控制图片旋转和平移     Matrix matrix = new Matrix();     //设置旋转角度     matrix.postRotate((rotate += 48) % 360,       rotateImg.getWidth() / 2, rotateImg.getHeight() / 2);     //设置左边距和上边距     matrix.postTranslate(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值