SurfaceView总结 surfaceview camera

因为上课要PPT汇报,我自己做了一个总结,现在把它放上来,下次容易找。

View是在UI的主线程中更新画面,而SurfaceView是在一个新线程中更新画面。View的特性决定了其不适合做动画,因为如果更新画面时间过长,那么主UI线程就会被正在画的函数阻塞。所以Android中通常用SurfaceView显示动画效果。

在对SurfaceView进行操作前Android为我们提供了一个十分好用的接口:SurfaceHolder.Callback接口。

SurfaceHolder.Callback接口的三个抽象方法是SurfaceView的三个生命周期

1.abstractvoidsurfaceChanged(SurfaceHolderholder, int format, int width, int height)

This is called immediatelyafter any structural changes (format or size) have been made to thesurface.

2.abstractvoidsurfaceCreated(SurfaceHolderholder)

This is called immediatelyafter the surface is first created.

3.abstractvoidsurfaceDestroyed(SurfaceHolderholder)

This is called immediatelybefore a surface is being destroyed

注意:

1> 所有SurfaceView和SurfaceHolder.Callback的方法都应该在UI线程里调用,一般来说就是应用程序主线程。
渲染线程所要访问的各种变量应该作同步处理。
2> 由于surface可能被销毁,它只SurfaceHolder.Callback.surfaceCreated()SurfaceHolder.Callback.surfaceDestroyed()之间有效,所以要确保渲染线程访问的是合法有效的surface。可以在主线程之外的线程中向屏幕绘图,这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度。
在游戏开发中多用到SurfaceView,游戏中的背景、人物、动画等等尽量在画布canvas中画出。

View是没有缓存机制的,每次绘图都是重新绘制

若要使用双缓冲机制的话。

1、自定义一个View 实现onDraw方法

2、调用这个方法,调用刷新onDraw()方法ssinView.postInvalidate();

3.需要格外创建一个Canvas,每次都

public voidonDraw(Canvascanvas){

if(x >=480){

x = 0;//清空画布

canvas.drawColor(Color.BLACK);//重新创建一个新的图

bitmap =Bitmap.createBitmap(480,104, Config.ARGB_8888); }

else{

//在缓冲中将之前的图绘制好,然后在真正的Canvas上绘制缓冲中的图Canvas c = newCanvas();

c.setBitmap(bitmap);

inty = (int)(A*Math.sin(x/180.0f*Math.PI)); System.out.println("==================y:"+y+"===x:"+x);c.drawPoint(x, y+A, paint); //canvas.save(); canvas.drawBitmap(bitmap, 0, 0,paint); x+=5; }}

Surfaceview实现了双缓冲技术

提供了一个类SurfaceHolder

1、继承SurfaceView实现Callback接口(在newSurfaceView的时候会自动回调)

2、刷新SurfaceView

// TODOAuto-generated method stub

super.run();

while(flag ==true){ //锁定,获得Canvas

Canvascanvas=surfaceHolder.lockCanvas(null);

onDraw(canvas);//释放锁 surfaceHolder.unlockCanvasAndPost(canvas);

asinSurfaceView.x+=5;

try{ Thread.sleep(sleepTime);

} catch(InterruptedExceptione)
{ // TODO Auto-generated catch block

e.printStackTrace();} }

Surfaceview控制Surface的绘制位置。

第一步:

继承SurfaceView并实现SurfaceHolder.Callback接口

第二步: SurfaceView.getHolder()获得SurfaceHolder对象

第三步:SurfaceHolder.addCallback(callback)添加回调函数

第四步:SurfaceHolder.lockCanvas()获得Canvas对象并锁定画布

第五步:Canvas绘画

第六步:SurfaceHolder.unlockCanvasAndPost(Canvascanvas)结束锁定画图,并提交改变,将图形显示。

  

爱华网本文地址 » http://www.aihuau.com/a/25101017/362229.html

更多阅读

2014考博英语复习方法总结

考博英语怎么复习?这确实是让报考博士研究生学位的考生们觉得头疼的一个大问题。相信各位参加博士研究生考试的考生们也会发现,网上考博的资料远远不如考研时的资料多,并且零零散散,众说纷纭。为了帮助各位报考博士研究生学位的考生们,

大学生最好的学习方法总结编

大学生最好的学习方法【总结编】——简介很多同学,还有学弟、学妹们都在问我怎么复习,我就想正好借这个机会和大家分享一下我的经验。虽然我谈不上一个学习很好的乖孩子,但是仅就考试而言,我在过去的三个学期期末考试中,都拿了甲等,而且复

总结编:最好的高二学习方法

总结编:最好的高二学习方法——简介高二是高中三年中最关键的一年,在开学之初希望同学们迅速适应新的环境,提升学习和精神两个状态,养成良好的学习和生活习惯。希望你们逐渐形成坚韧不拔的学习品质,掌握科学有效的学习方法,坚持会学、主动

ip camera家用无线网络监控摄像头安装 家用监控摄像头安装

ip camera家用无线网络监控摄像头安装——简介家里有小宝宝,家里有老人,或者家里没人防盗,都离不开无线监控了,现在科技的发展,让我们在千里之外都可以看到家里的情况,下面我来教大家如何安装使用wifi无线监控摄像头;由于设置比较多,经验内

Camera Raw 插件的下载和安装技巧 camera raw插件安装

Camera Raw 插件的下载和安装技巧——简介数码相机的更新换代速度越来越快,每年都有N多种新型号推出,Photoshop是处理图片最常用的软件之一,只有不断更新Camera Raw插件,才能支持读取新型号相机所摄的RAW格式的照片。Camera Raw 插件的

声明:《SurfaceView总结 surfaceview camera》为网友强势姑娘分享!如侵犯到您的合法权益请联系我们删除