Canvas 又称为画布,在游戏开发过程中是一个经常使用的类。下面举一个实例在完成画布的基本功能

代码如下:

public class MySurfaceView extends SurfaceView implements Callback, Runnable {//用于控制SurfaceViewprivate SurfaceHolder sfh;//声明一个画笔private Paint paint;//声明一条线程private Thread th;//线程消亡的标识位private boolean flag;//声明一个画布private Canvas canvas;//声明屏幕的宽高private int screenW, screenH;//设置画布绘图无锯齿private PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);/** * SurfaceView初始化函数 */public MySurfaceView(Context context) {super(context);//实例SurfaceHoldersfh = this.getHolder();//为SurfaceView添加状态监听sfh.addCallback(this);//实例一个画笔paint = new Paint();//设置画笔颜色为白色paint.setColor(Color.WHITE);//设置焦点setFocusable(true);}/** * SurfaceView视图创建,响应此函数 */@Overridepublic void surfaceCreated(SurfaceHolder holder) {screenW = this.getWidth();screenH = this.getHeight();flag = true;//实例线程th = new Thread(this);//启动线程th.start();}/** * 游戏绘图 */public void myDraw() {try {canvas = sfh.lockCanvas();if (canvas != null) {//----设置画布绘图无锯齿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);//----绘制矩形2Rect rect = new Rect(10, 110, 60, 130);canvas.drawRect(rect, paint);canvas.drawRect(rect, paint);//----绘制圆角矩形RectF rectF = new RectF(10, 140, 60, 170);canvas.drawRoundRect(rectF, 20, 20, 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);//路线1path.lineTo(200, 150);//路线2path.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);}} catch (Exception e) {// TODO: handle exception} finally {if (canvas != null)sfh.unlockCanvasAndPost(canvas);}}/** * 触屏事件监听 */@Overridepublic boolean onTouchEvent(MotionEvent event) {return true;}/** * 按键事件监听 */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {return super.onKeyDown(keyCode, event);}@Overridepublic void run() {while (flag) {long start = System.currentTimeMillis();myDraw();long end = System.currentTimeMillis();try {if (end - start < 50) {Thread.sleep(50 - (end - start));}} catch (InterruptedException e) {e.printStackTrace();}}}/** * SurfaceView视图状态发生改变,响应此函数 */@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}/** * SurfaceView视图消亡时,响应此函数 */@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {flag = false;}

更多相关文章

  1. QT on Android(安卓)开机动画和开机图片显示
  2. Android(安卓)拍照7.0适配(源码)
  3. Android(安卓)File类 根据官方文档理解
  4. 最详细的mac下Android(安卓)studio配置gradle的路径
  5. android使用http协议实现文件的上传
  6. Android——使用Volley+fastJson在新线程中读取网络接口获取天气
  7. 绿鹅等大厂2020Android面试经验(持续整理更新中)
  8. Android中常用的优秀开源框架
  9. Android(安卓)Studio升级4.0后的编译问题

随机推荐

  1. 2018-7月Android试题整理
  2. Android(安卓)边框圆角
  3. 手把手教你如何创建一个连接到Binder上的
  4. android Xutils Http模块分析
  5. 【Android(安卓)Developers Training】 1
  6. Android(安卓)studio 插件推荐
  7. Android(安卓)ViewPager 取消预加载
  8. 菜单函数Android学习整理-菜单Menu
  9. Android桌面悬浮清内存app概述
  10. android源码的下载和编译,需要安装的库