关闭

SurfaceView的使用

标签: 关于SurfaceView
238人阅读 评论(0) 收藏 举报

首先说一下SurfaceView的特点:

可以在主线程之外的线程中向屏幕上绘图。

主要是用于游戏、动画及一些需要频繁绘制图像的视图中。

SurfaceView有两个Surface,一个是主线程的Surface,一个是自己特有的Surface


SurfaceView该如何使用:

第一步先创建一个类继承SurfaceView

第二步通过getHolder获取管理surface的SurfaceHolde的对象

第三步实现Callback接口,通过该对象调用addCallback(回调函数)

第四步实现Callback接口需要重写三个方法

第五步通过SurfaceHolde的对象调用lockCanvas()获取画布

第六步画完后调用unlockCanvasAndPost(canvas)将画布返回给主线程


具体代码如下:

// 1.继承SurfaceView
public 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
	 */
	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		Thread thread = new Thread(this);
		thread.start();
		paint = new Paint();
		paint.setColor(Color.BLUE);
	}


	/**
	 * 当surface大小改变的时候调用此方法
	 */
	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
	}


	/**
	 * 当界面退出时(消亡)调用此方法 将子线程停止,一般子线程写在循环中,循环结束停止子线程。
	 */
	@Override
	public 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);
		}
	}


	@Override
	public void run() {


		while (postion < 3) {
			try {
				draw();
				Thread.sleep(1000);
				postion++;
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}






0
0
查看评论

Android中SurfaceView使用详解

1.什么是SurfaceView?     Surface意为表层、表面,顾名思义SurfaceView就是指一个在表层的View对象。为什么说是在表层呢,这是因为它有点特殊跟其他View不一样,其他View是绘制在“表层”的上面,而它就是充当“表层”本身。SDK的文档 说到:...
  • android_cmos
  • android_cmos
  • 2017-04-03 12:54
  • 1725

SurfaceView的用法及注意事项

surfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的surface。我们可以控制这个surface的格式和尺寸。SurfaceView控制这个surface绘制的位置。surface类直接继承Object,对应了一块屏幕缓冲区,每个窗口window对应一个Surfac...
  • dubuwucool
  • dubuwucool
  • 2016-11-30 08:45
  • 621

SurfaceView 基础用法

Android 游戏开发框架核心组件SurfaceView
  • zhaoyw2008
  • zhaoyw2008
  • 2015-05-18 17:33
  • 22814

Android--SurfaceView使用详解

SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface。你可以控制这个Surface的格式和尺寸。Surfaceview控制这个Surface的绘制位置。         surfac...
  • chaoyu168
  • chaoyu168
  • 2016-05-17 14:17
  • 6602

Android视图SurfaceView的使用

Android视图SurfaceView的使用 绘制圆形进度条。
  • hehe26
  • hehe26
  • 2016-10-31 12:01
  • 2104

【Android】Android SurfaceView使用详解

1. SurfaceView的定义 前面已经介绍过View了,下面来简单介绍一下SurfaceView,参考SDK文档和网络资料:SurfaceView是View的子类,它内嵌了一个专门用于绘制的Surface,你可以控制这个Surface的格式和尺寸,Surfaceview控制这个Surface的...
  • Taily_Duan
  • Taily_Duan
  • 2017-03-13 17:17
  • 540

android的surfaceview的用法

参考了文章:Android中SurfaceView的使用详解,  但在该文基础上进行了一定的修改。       说到sufaceview就得讲讲这个类是干什么的。是的,它是用来控制自定义绘图的。起码我现在看到的用法都是这样。     &...
  • heikefangxian23
  • heikefangxian23
  • 2015-11-30 11:36
  • 19506

Android开发--SurfaceView的基本用法

在Android中可以利用View来绘制一些图形,图片,但当我们开发游戏或视频时,View就不再适用,这时必须使用SurfaceView来代替View。SurfaceView相比View可以实现多线程绘图和双缓冲技术,可以使得我们的动画更加流畅。接下来简单记录一下Surface的基本用法: ...
  • smbroe
  • smbroe
  • 2014-12-16 12:12
  • 2010

SurfaceView与View的区别和使用场景

surfaceView和View最本质的区别在于: surfaceView是在一个新起的单独线程中可以重新绘制画面,而View必须在UI的主线程中更新画面。那么在UI的主线程中更新画面 可能会引发问题,比如你更新画面的时间过长,那么你的主UI线程会被你正在画的函数阻塞。那么将无法响应按键,触屏等消...
  • jungle_pig
  • jungle_pig
  • 2017-01-10 16:09
  • 912

SurfaceView的使用详解

SurfaceView在安卓开发中使用还是比较广泛的。多数是用于游戏开发,图片和视频的播放等。 SurfaceView简介 SurfaceView和View的比较 简单的使用示例 关于SurfaceView的优秀文章 一,SurfaceView简介 首先我们先来看下官方...
  • ls1792304830
  • ls1792304830
  • 2016-11-17 17:55
  • 1559
    个人资料
    • 访问:20833次
    • 积分:453
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条