> 首先创建一个自己的View类

 
-->继承SurfaceView并实现SurfaceHolder.Callback接口 
 
--> SurfaceView.getHolder()获得SurfaceHolder对象 
 
-->SurfaceHolder.addCallback(callback) 添加回调函数
 
-->SurfaceHolder.lockCanvas()获得Canvas对象并锁定画布
 
--> Canvas绘画 
 
-->SurfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定,并提交改变,将图形显示。
 
 
 
 
 
 
public class GameSFView extends SurfaceView implements Callback{
 
    private SurfaceHolder surfaceHolder;
    private int selectedX = 0;
    
    private int selectedY = 0;
    /**
     * 单元格的宽度
     */
    private float width;
    
    /**
     *单元格的高度 
     */
    private float height;
    /**
     *main.xml 中引用此surfaceview类 构造方法必须使用两个形参的形式 
     */
    public GameSFView(Context context, AttributeSet attrs) {
        super(context, attrs);
        surfaceHolder = this.getHolder(); // 获取SurfaceHolder对象
        //监听Surface的生命周期  给SurfaceView当前的持有者一个回调对象。
        surfaceHolder.addCallback(this); // 添加回调
        
    }
}
 
实现三个回调函数
 
//在surface的大小发生改变时激发
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        
    }
 
    //在创建时激发,一般在这里调用画图的线程。
    //最好在Surface被创建的时候,开启绘图线程。 
    //子线程绘图 缓存到surface中
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        draw();
    }
 
    //销毁时激发,一般在这里将画图的线程停止、释放。
    //最好在Surface被销毁的时候,销毁绘图线程
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
 
    }
 
 
 
自定义绘制方法
 
 
/**
     * 自定义绘制方法
     */
    public void draw() {
        synchronized(surfaceHolder){
            // 获取Canvas对象
            // 锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。
            Canvas canvas = null;
            Paint paint = new Paint();
            try{
                canvas = surfaceHolder.lockCanvas(); // 锁住Canvas
                
                // 清理屏幕 绘制背景
                initGameView(canvas, paint);
                //重绘surfaceview 填充新增的数据
                inflateNewNum(canvas,paint);
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                if(canvas != null)
                // 结束锁定画图,并提交改变。
                surfaceHolder.unlockCanvasAndPost(canvas);  // 解锁Canvas,更新
            }
        }    
    }
 
这里最好使用同步锁,并且在使用try catch finally 进行异常捕获。
 
 
 
 
private void initGameView(Canvas canvas,Paint paint){
        //bgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.background);
        //初始化游戏背景
        initGameBg(canvas,paint);
        //初始化游戏线条
        initGameLine(canvas,paint);
        //初始化游戏数据
        initFirstNumber(canvas,paint);
        
    }
 
 
 
绘制棋盘上的线条
private void initGameLine(Canvas canvas,Paint paint) {
        //设置画笔颜色
        paint.setColor(Color.BLACK);        
        //画横线
        for(int i=1;i<10;i++){            
            canvas.drawLine(0 ,i*height, getWidth(), i*height, paint);
        }
        //画竖线
        for(int i=1;i<9;i++){            
            canvas.drawLine(i*height,0, i*height,getWidth(), paint);
        }
        //画三道横粗线
        paint.setStrokeWidth(4);
        for(int i=1;i<4;i++){
            canvas.drawLine(0 ,i*height*3, getWidth(), i*height*3, paint);
        }
        //画三道竖粗线
        for(int i=1;i<9;i++){            
            canvas.drawLine(i*height*3,0, i*height*3,getWidth(), paint);
        }
    }
 

结伴旅游,一个免费的交友网站:www.jieberu.com

推推族,免费得门票,游景区:www.tuituizu.com

android 小游戏 ---- 数独(二)的更多相关文章

  1. android小游戏模版—重力感应

               好久没更新博客了,今天来谈谈android小游戏---重力感应,一般在游戏里运用的比較多,比方这类游戏有:神庙逃亡.极品飞车,平衡球.三围重力迷宫,重力赛车等. 首先什么是重力感 ...

  2. 软件工程 Android小游戏 猜拳大战

    一.前言 最近学校举办的大学生程序设计竞赛,自己利用课余时间写了一个小游戏,最近一直在忙这个写这个小游戏,参加比赛,最终是老师说自己写的简单,可以做的更复杂的点的.加油 二.内容简介 自己玩过Andr ...

  3. 介绍一款Android小游戏--交互式人机对战五子棋

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6589025 学习Android系统开发之余,编 ...

  4. Android开发系列(十六):【Android小游戏成语连连看】第二篇

    写的晚了,在分工个Z市高中的一个成绩查询的系统,原系统居然是用VB写的,我不得不佩服原本写系统的那位哥们真能耐得住. 明天搭建下SVN就等着先发project款然后開始项目了.想想有工资进账,心里也为 ...

  5. Android小游戏:功夫蛇 团队开发经验总结

    前言 曾经没有代码管理的习惯,不用回版本控制工具.这种陋习虽然让原来千穿百孔的代码远离了实现,但这种逃避未必就是一件好事吧;). 于是从博客中挖出了原来的文章,并千辛万苦找到了最早的代码贴出来. 这篇 ...

  6. Android开发系列(十五):【Android小游戏成语连连看】第一篇

            学了一个多月安卓.由于暑假的时候要给朋友说写个小游戏.并且也想检測下自己的能力,所以说从7号開始就着手写这个小游戏了,前前后后带上课到今天总算是写完了,可是写的这个小游戏还是有非常多问 ...

  7. android小技巧(二)

    一.如何控制Android  LED等?(设置NotificationManager的一些参数) 代码如下: final int ID_LED=19871103; NotificationManage ...

  8. 第四十天 阿乐在其中—Android小游戏的飞机(四)加入敌人

    8月9日,晴. "江城如画里,山晓望晴空. 雨水夹明镜.双桥落彩虹. 人烟寒橘柚,秋色老梧桐." 上篇已经让飞机载入子弹和音效及背景音乐,本篇主要加入敌机. 本篇要用到的几个函数解 ...

  9. android小游戏 飞机躲子弹

    最近android老师让每人写一个小东西,因为之前学awt时写过一个java版的飞机躲子弹,所以这次想写成android版的. 文件直接导入就行http://files.cnblogs.com/fil ...

随机推荐

  1. html5绘图笔记纪要

    在html5之前,前端是无法再html页面上动态绘制图片 html5新增了一个canvas元素,相当于一个画布,可以获取一个CanvasRenderingContext2D对象 CanvasRende ...

  2. [每天一课] 今天就讲一讲关于vue-cli 脚手架里 如何调用API

    既然vue-resource停更了,就不讲了,但是效果也是差不多了 今天主要讲一下关于axios的方式来调用API,按照vue-cli的模式,这个当然得先引入一个axios这个模块了.那当然得走一遍终 ...

  3. xmake v2.2.2, 让C/C++拥有包依赖自动构建

    前言 历经四个多月,xmake终于更新了新版本v2.2.2,并且上线了重量级功能:原生支持的远程依赖包管理. 而这个特性,其实我陆陆续续写了将近一年的时间,才初步完成,对于此特性的开发进展和历史,有兴 ...

  4. Dapper基本使用

    http://www.cnblogs.com/Sinte-Beuve/p/4231053.html

  5. Java中HashMap扩容机制思考

    1. HashMap在什么条件下扩容 判断HashMap的数组Size大小如果超过loadFactor*capacity,就要扩容. 相关的类属性: capacity:当前数组容量,始终保持 2^n, ...

  6. Projection Pursuit Regression----读书笔记

    The central idea is to extract linear combinations of the inputs as derived features, and then model ...

  7. [BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆)

    [BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆) 题面 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下.如果 ...

  8. RabbitMq学习3-工作队列(Work queues)

    工作队列(又称:任务队列——Task Queues)是为了避免等待一些占用大量资源.时间的操作.当我们把任务(Task)当作消息发送到队列中,一个运行在后台的工作者(worker)进程就会取出任务然后 ...

  9. spring boot配置分页插件

    在springboot中使用PageHelper插件有两种较为相似的方式,接下来我就将这两种方式进行总结. 方式一:使用原生的PageHelper 1.在pom.xml中引入依赖 <depend ...

  10. 剑指offer-树的子结构-python

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)     思路 空树不是任意一个树的子结构,如果 root1 与root2 中有一个为空树的话,返回 ...