自定义View之贪吃蛇
来源:互联网 发布:淘宝sma是雪梨的店吗 编辑:程序博客网 时间:2024/04/28 10:57
本次的重点,如何让自定义View动起来。
效果如下图: 如图所见,我们自定义3个View
一个是单元Tileview,用来画方块
一个是贪吃蛇SnakeView继承至TileView
一个是背景BackgroundView
本次重点介绍SnakeView因为只有小蛇是动的。
前面讲过,让View刷新有两种方式,一个在UI线程中,一个在非UI线程(一般使用SurfaceView)。
简单的,不是非常频繁的刷新可以在UI线程中。SnakeView就是采用这种方式。
核心实现:
1.使用Handler来刷新View,使用Handler中的 sendMessageDelayed的方式来控制小蛇的速度。delay越久,小蛇速度越慢。
class RefreshHandler extends Handler { @Override public void handleMessage(Message msg) { //更新小蛇的状态 SnakeView.this.update(); //刷新小蛇的view SnakeView.this.invalidate(); } public void sleep(long delayMillis) { this.removeMessages(0); sendMessageDelayed(obtainMessage(0), delayMillis); } };
2.重写ondraw方法中,构造小蛇身体组成的方块即可。
@Override public void onDraw(Canvas canvas) { super.onDraw(canvas); for (int x = 0; x < mXTileCount; x += 1) { for (int y = 0; y < mYTileCount; y += 1) { if (mTileGrid[x][y] > 0) { canvas.drawBitmap(mTileArray[mTileGrid[x][y]], mXOffset + x * mTileSize, mYOffset + y * mTileSize, mPaint); } } } }
将这个屏幕转化为一个矩阵,矩阵的行数就是mXTileCount,列数就是mYTileCount.对应的元素是方块,是否需要画方块由mTileGrid[][]二维数组保存的值决定的。
小蛇的行动其实就是对mTileGrid二维数组中的值进行修改。每次更新View都会将这个二维数组遍历一次,重新构造View。因此效率很差。
mXTileCount:当前屏幕X方向最都能画几个方块mYTileCount:当前屏幕Y方向最都能画几个方块
总结:直接在线程UI中操作View刷新
优点:实现简单。
缺点:效率低,不流畅,view位置变化是很生硬,从这消失,到那出现。中间没有动画来连贯。
0 0
- 自定义View之贪吃蛇
- Android-贪吃蛇(二)-自定义的view
- JavaScript学习之自定义对象--小游戏贪吃蛇
- MFC之贪吃蛇
- C++ 之 贪吃蛇
- c++之贪吃蛇
- C++之贪吃蛇
- unity3d之贪吃蛇
- 命令行之贪吃蛇
- iOS之贪吃蛇
- JavaScript之贪吃蛇
- qt之贪吃蛇
- Labview之贪吃蛇
- 自定义view之继承view
- 自定义View之 继承View
- Android 自定义View 之 自定义View属性
- 自定义View(一)之初识自定义View
- 自定义View之自定义标题栏
- android判断当前设备的支持哪些Feature
- 嘀嘀打车起家的辛苦历程
- FAT32文件系统转换为NTFS文件系统的讨论
- 干扰带
- 百度地图开发第四天(公交路线查询)
- 自定义View之贪吃蛇
- Cocos的回调函数
- umeng(友盟)集成--------认识umeng
- hdu1686--Oulipo
- MFC下CSocket编程详解
- spring整合hibernate配置文件
- 隐藏/显示界面动画效果
- with as 的用法(SQL)
- C++ 排序函数 sort(),qsort()的用法