SurfaceView的使用
来源:互联网 发布:保险网络大学考点 编辑:程序博客网 时间:2024/05/22 02:14
首先说一下SurfaceView的特点:
可以在主线程之外的线程中向屏幕上绘图。
主要是用于游戏、动画及一些需要频繁绘制图像的视图中。SurfaceView有两个Surface,一个是主线程的Surface,一个是自己特有的Surface
SurfaceView该如何使用:
第一步先创建一个类继承SurfaceView
第二步通过getHolder获取管理surface的SurfaceHolde的对象
第三步实现Callback接口,通过该对象调用addCallback(回调函数)
第四步实现Callback接口需要重写三个方法
第五步通过SurfaceHolde的对象调用lockCanvas()获取画布
第六步画完后调用unlockCanvasAndPost(canvas)将画布返回给主线程
具体代码如下:
// 1.继承SurfaceViewpublic class GameView extends SurfaceView implements Callback, Runnable {int postion;Paint paint;Bitmap bg/* 背景 */, map/* 路径 */;Bitmap turreti;// 道具的按键Bitmap[] turretis = new Bitmap[2];// SurfaceHolder对Surface进行管理SurfaceHolder sh;public GameView(Context context) {super(context);// 2.获取可以管理可以在子线程中绘制图像的Surface的SurfaceHolder的对象sh = getHolder();// 3.sh调用callBack方法(回调函数),才能知道管理的对象,即知道要联系的suface对象。sh.addCallback(this);// 添加回调函数,就会调用surfaceCreated()方法}// Callback(SurfaceHolder的内部接口)接口重写的三个方法/** * 建立与surface的连接 .在此方法中,新建子线程. * 哪个SurfaceHolder调用回调函数,该方法参数的对象就是该SurfaceHolder */@Overridepublic void surfaceCreated(SurfaceHolder holder) {Thread thread = new Thread(this);thread.start();paint = new Paint();paint.setColor(Color.BLUE);}/** * 当surface大小改变的时候调用此方法 */@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}/** * 当界面退出时(消亡)调用此方法 将子线程停止,一般子线程写在循环中,循环结束停止子线程。 */@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}Canvas canvas;/** * 绘制图像。所有绘制图像的方法都在此进行操作 */public void draw() {// sh.lockCanvas(dirty)//只选取一个矩形部分画图canvas = sh.lockCanvas();// 即获取画布对象// 有可能子线程做到一半主线程结束了,就锁不住画布。所以要进行判断if (canvas != null) {if (postion == 0) {canvas.drawRect(10, 10, 100, 100, paint);} else if (postion == 1) {canvas.drawCircle(100, 100, 100, paint);} else if (postion == 2) {canvas.drawLine(10, 10, 100, 100, paint);}// 将画完的内容传递给主线程,才能程序在界面中sh.unlockCanvasAndPost(canvas);}}@Overridepublic void run() {while (postion < 3) {try {draw();Thread.sleep(1000);postion++;} catch (InterruptedException e) {e.printStackTrace();}}}
0 0
- SurfaceView的基本使用
- Android的SurfaceView使用
- SurfaceView的基本使用
- SurfaceView的简单使用
- SurfaceView的基本使用
- SurfaceView的使用实例
- surfaceview的使用
- SurfaceView的基本使用
- surfaceView的使用
- Android的SurfaceView使用
- SurfaceView的基本使用
- SurfaceView的使用基础
- SurfaceView的使用
- SurfaceView的使用
- 关于SurfaceView的使用
- 关于surfaceview的使用
- SurfaceView的使用
- SurfaceView的基本使用
- Powershell 初探
- python分布式计算框架PP(Parallel Python)集群模式试用
- hdu3949xor(高斯消元)
- 2.1.1 单例模式
- js for循环的练习 99乘法表疯狂打印
- SurfaceView的使用
- 特殊数列的求和
- 91. Decode Ways
- 输入输出I/O
- 【Linux学习】——安装nginx以及相关注意事项
- UIFlowLayout:the behavior of the UICollectionViewFlowLayout is not defined
- 153. Find Minimum in Rotated Sorted Array **
- 记忆化搜索专题--nkoj2087着色方案
- 解救小易----网易2017内推笔试编程题合集(二)