> 首先创建一个自己的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. eclipse maven 项目突然所有的JS方法都失效了

    原因:JS 或者 jQuery 有严重的语法错误

  2. Deepin15.10 python3安装、更新pip

    Deepin自带的Python3没有pip 需要安装一下: sudo apt install python3-pip更新pip sudo pip3 install --upgrade pip 然后运行 ...

  3. mysql简单命令

    库: 增 create database db1:新建一个默认编码的库 create database db1 charset uet8 ;建一个编码为 utf8 的库 删 drop database ...

  4. 小白学Python——Matplotlib 学习(3) 函数图形

    import matplotlib.pyplot as plt import numpy as np x = np.linspace(-1,1,50) y = 2*x + 1 plt.figure() ...

  5. jQuery之操作样式的css方法

    注意点都在代码里 <style> div { width: 200px; height: 200px; background-color: pink; } </style> & ...

  6. springmvc,springboot单元测试配置

    1. springmvc单元测试配置 <dependency> <groupId>junit</groupId> <artifactId>junit&l ...

  7. 【学习总结】快速上手Linux玩转典型应用-第5章-远程连接SSH专题

    课程目录链接 快速上手Linux玩转典型应用-目录 目录 1. 认识SSH 2. 服务器安装SSH服务 3. 客户端安装SSH工具 4. 客户端链接SSH服务 5. SSH config 6. SSH ...

  8. LazyMan的深入解析和实现

    一.题目介绍 以下是我copy自网上的面试题原文: 实现一个LazyMan,可以按照以下方式调用: LazyMan("Hank")输出: Hi! This is Hank!   L ...

  9. nginx之热部署,以及版本回滚

    热部署的概念:当从老版本替换为新版本的nginx的时候,如果不热部署的话,会需要取消nginx服务并重启服务才能替换成功,这样的话会使正在访问的用户在断开连接,所以为了不影响用户的体验,且需要版本升级 ...

  10. 基于FastDFS在SpringBoot上的上传与下载

    方法: 1.在application.properties里设置参数,其中tracker-list是tracker的端口 fdfs.so-timeout= fdfs.connect-timeout= ...