> 首先创建一个自己的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. 前端 CSS 盒子模型 边框 border属性

    边框 border:边框的意思,描述盒子的边框 边框有三个要素: 粗细 线性样式 颜色 border: solid border特性 如果颜色不写,默认是黑色.如果粗细不写,不显示边框.如果只写线性样 ...

  2. 华南理工大学 “三七互娱杯” G HRY and tree

    https://ac.nowcoder.com/acm/contest/874/G 题目大意:对于一个连通图,现在定义两个点的贡献为连接两点的路径上最大的权值 求任意两个点贡献的和 这个题看懂花了我很 ...

  3. [Web 前端] 033 Vue 的简单使用

    目录 0. 方便起见,定个轮廓 1. v-model 举例 2. v-for 举例 3. v-if 举例 4. 事件绑定 举例 5. v-show 举例 0. 方便起见,定个轮廓 不妨记下方的程序为 ...

  4. SwipeRefreshLayout和RecyclerView类

    1 SwipeRefreshLayout和RecyclerView之间的关系 内容栏上下滚动是RecyclerView控制的,只有当内容栏滑动到最顶上时,再也拉不动了的时候,这个时候将动作交给Swip ...

  5. Python内置函数compile

    英文文档: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) Compile the source i ...

  6. 小解POJO、PO、BO、VO

    POJO :plain ordinary java object 无规则简单java对象 一个中间对象,可以转化为PO.DTO.VO. 一个简单的Java类,这个类没有实现/继承任何特殊的java接口 ...

  7. [七月挑选]frp初使用

    title: frp初使用 先starfatedier/frp,再开工. 什么是frp? frp is a fast reverse proxy to help you expose a local ...

  8. Django之modles 多对多创建第三张表

    一.第一种:纯自动创建第三张表 纯自动 class Book(models.Model): title = models.CharField(max_length=32) price = models ...

  9. <mvc:argument-resolvers> 自定义注解处理参数

    直接看引自: http://blog.csdn.net/u013160932/article/details/50609092

  10. 04javascript02

    1.BOM编程 1.1入门 BOM就是浏览器对象模型编程,通过javascript引擎提供的四个浏览器对象,操作浏览器,这叫BOM编程. 1.2window对象(重点) <!DOCTYPE ht ...