画布函数介绍-android游戏开发

主要函数介绍:

//----设置画布绘图无锯齿
                canvas.setDrawFilter(pfd);    
                //----利用填充画布,刷屏
                canvas.drawColor(Color.BLACK);
                //----绘制文本
                canvas.drawText("drawtext", 10, 10, paint);
                //----绘制像素点
                canvas.drawPoint(10,20,paint);
                //----绘制多个像素点
                canvas.drawPoints(new float[]{10,30,30,30}, paint);
                //----绘制直线
                canvas.drawLine(10, 40, 50, 40, paint);
                //----绘制多条直线
                canvas.drawLines(new float[] { 10, 50, 50, 50, 70, 50, 110, 50 }, paint);
                //----绘制矩形
                canvas.drawRect(10, 60, 40, 100, paint);
                //----绘制矩形2
                Rect rect = new Rect(10, 110, 60, 130);
                canvas.drawRect(rect, paint);
                //----绘制圆角矩形
                RectF rectF = new RectF(10, 140, 60, 170);
                canvas.drawRoundRect(rectF, 5, 5, paint);
                //----绘制圆形
                canvas.drawCircle(20, 200, 20, paint);
                //----绘制弧形
                canvas.drawArc(new RectF(150, 20, 200, 70), 0, 230, true, paint);
                //----绘制椭圆
                canvas.drawOval(new RectF(150, 80, 180, 100), paint);
                //----绘制指定路径图形
                Path path = new Path();
                //设置路径起点
                path.moveTo(160, 150);
                //路线1
                path.lineTo(200, 150);
                //路线2
                path.lineTo(180, 200);
                //路径结束
                path.close();
                canvas.drawPath(path, paint);
                //----绘制指定路径图形
                Path pathCircle = new Path();
                //添加一个圆形的路径
                pathCircle.addCircle(130, 260, 20, Path.Direction.CCW);
                //----绘制带圆形的路径文本
                canvas.drawTextOnPath("PathText", pathCircle, 10, 20, paint);

界面:

案例源码:

  1 package caicai.animation;
  2 import android.content.Context;
  3 import android.graphics.Bitmap;
  4 import android.graphics.BitmapFactory;
  5 import android.graphics.Canvas;
  6 import android.graphics.Color;
  7 import android.graphics.Paint;
  8 import android.graphics.PaintFlagsDrawFilter;
  9 import android.graphics.Path;
 10 import android.graphics.Rect;
 11 import android.graphics.RectF;
 12 import android.util.Log;
 13 import android.view.MotionEvent;
 14 import android.view.SurfaceHolder;
 15 import android.view.SurfaceHolder.Callback;
 16 import android.view.SurfaceView;
 17 
 18 public class canvarsView extends SurfaceView implements Callback, Runnable {
 19     private Paint paint;// 画布
 20     private SurfaceHolder sfh; // 用于控制SurfaceView
 21     private Canvas canvas;// 画布
 22     private boolean flag;// 关闭线程标志
 23     private Thread th;// 新建线程
 24 
 25     //设置画布绘图无锯齿
 26     private PaintFlagsDrawFilter pfd=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG);
 27 
 28     public canvarsView(Context context) {
 29         super(context);
 30         sfh = this.getHolder();// 实例SurfaceHolder
 31         sfh.addCallback(this);// 为SurfaceView添加状态监听
 32         paint = new Paint();//实例一个画笔
 33         paint.setColor(Color.WHITE);//设置画笔颜色为白色
 34         setFocusable(true);//设置焦点
 35     }
 36 
 37     @Override
 38     public void surfaceCreated(SurfaceHolder holder) {
 39         flag = true;
 40         //实例线程
 41         th = new Thread(this);
 42         //启动线程
 43         th.start();
 44     }
 45 
 46     public void mydraw() {
 47         try {
 48             canvas = sfh.lockCanvas();//锁定画布
 49             if (canvas != null) {
 50                 //----设置画布绘图无锯齿
 51                 canvas.setDrawFilter(pfd);    
 52                 //----利用填充画布,刷屏
 53                 canvas.drawColor(Color.BLACK);
 54                 //----绘制文本
 55                 canvas.drawText("drawtext", 10, 10, paint);
 56                 //----绘制像素点
 57                 canvas.drawPoint(10,20,paint);
 58                 //----绘制多个像素点
 59                 canvas.drawPoints(new float[]{10,30,30,30}, paint);
 60                 //----绘制直线
 61                 canvas.drawLine(10, 40, 50, 40, paint);
 62                 //----绘制多条直线
 63                 canvas.drawLines(new float[] { 10, 50, 50, 50, 70, 50, 110, 50 }, paint);
 64                 //----绘制矩形
 65                 canvas.drawRect(10, 60, 40, 100, paint);
 66                 //----绘制矩形2
 67                 Rect rect = new Rect(10, 110, 60, 130);
 68                 canvas.drawRect(rect, paint);
 69                 //----绘制圆角矩形
 70                 RectF rectF = new RectF(10, 140, 60, 170);
 71                 canvas.drawRoundRect(rectF, 5, 5, paint);
 72                 //----绘制圆形
 73                 canvas.drawCircle(20, 200, 20, paint);
 74                 //----绘制弧形
 75                 canvas.drawArc(new RectF(150, 20, 200, 70), 0, 230, true, paint);
 76                 //----绘制椭圆
 77                 canvas.drawOval(new RectF(150, 80, 180, 100), paint);
 78                 //----绘制指定路径图形
 79                 Path path = new Path();
 80                 //设置路径起点
 81                 path.moveTo(160, 150);
 82                 //路线1
 83                 path.lineTo(200, 150);
 84                 //路线2
 85                 path.lineTo(180, 200);
 86                 //路径结束
 87                 path.close();
 88                 canvas.drawPath(path, paint);
 89                 //----绘制指定路径图形
 90                 Path pathCircle = new Path();
 91                 //添加一个圆形的路径
 92                 pathCircle.addCircle(130, 260, 20, Path.Direction.CCW);
 93                 //----绘制带圆形的路径文本
 94                 canvas.drawTextOnPath("PathText", pathCircle, 10, 20, paint);
 95             } else {
 96                 Log.i("tt", "获取不到画布");//释放画布
 97             }
 98         } catch (Exception e) {
 99 
100         } finally {
101             if (canvas != null)
102                 sfh.unlockCanvasAndPost(canvas);
103         }
104     }
105     /**
106      * SurfaceView视图状态发生改变,响应此函数
107      */
108     @Override
109     public void surfaceChanged(SurfaceHolder holder, int format, int width,
110             int height) {
111         // TODO Auto-generated method stub
112 
113     }
114     /**
115      * SurfaceView视图消亡时,响应此函数
116      */
117     @Override
118     public void surfaceDestroyed(SurfaceHolder holder) {
119         flag = false;//结束游戏,设置线程关闭标志为false
120 
121     }
122 
123     public void logic() {
124 
125     };
126 
127     @Override
128     public void run() {
129         while (flag) {
130             long start = System.currentTimeMillis();
131             mydraw();
132             logic();
133             long end = System.currentTimeMillis();
134             try {
135                 if (end - start < 50) {
136                     Thread.sleep(50 - (end - start));
137                 }
138             } catch (InterruptedException e) {
139                 e.printStackTrace();
140             }
141         }
142     }
143     //获取点击坐标
144     @Override
145     public boolean onTouchEvent(MotionEvent event) {
146         return true;
147     }
148 
149 }
canvarsView
 1 package caicai.animation;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Window;
 6 import android.view.WindowManager;
 7 
 8 public class MainActivity extends Activity {
 9     /** Called when the activity is first created. */
10     @Override
11     public void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         //设置全屏
14         this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
15         requestWindowFeature(Window.FEATURE_NO_TITLE);
16         //显示自定义的SurfaceView视图
17         setContentView(new canvarsView(this));
18 
19     }
20 }
MainActivity

谢谢支持下网站“趣淘鼓浪屿(www.qtgly.com)”

posted on 2013-08-27 14:39  clarenceV1  阅读(391)  评论(0编辑  收藏  举报

导航