surfacechanged(surfacechanged 发生)

http://www.itjxue.com  2023-02-26 16:38  来源:未知  点击次数: 

SurfaceView surfaceChanged 怎么才能再次调用

SurfaceView是View的子类,它内嵌了一个专门用于绘制的Surface,你可以控制这个Surface的格式和尺寸,Surfaceview控制这个Surface的绘制位置。surface是纵深排序(Z-ordered)的,说明它总在自己所在窗口的后面。SurfaceView提供了一个可见区域,只有在这个可见区域内的surface内容才可见。surface的排版显示受到视图层级关系的影响,它的兄弟视图结点会在顶端显示。这意味者 surface的内容会被它的兄弟视图遮挡,这一特性可以用来放置遮盖物(overlays)(例如,文本和按钮等控件)。注意,如果surface上面有透明控件,那么每次surface变化都会引起框架重新计算它和顶层控件的透明效果,这会影响性能。

SurfaceView默认使用双缓冲技术的,它支持在子线程中绘制图像,这样就不会阻塞主线程了,所以它更适合于游戏的开发。

SurfaceView的使用

首先继承SurfaceView,并实现SurfaceHolder.Callback接口,实现它的三个方法:surfaceCreated,surfaceChanged,surfaceDestroyed。

surfaceCreated(SurfaceHolder holder):surface创建的时候调用,一般在该方法中启动绘图的线程。

surfaceChanged(SurfaceHolder holder, int format, int width,int height):surface尺寸发生改变的时候调用,如横竖屏切换。

surfaceDestroyed(SurfaceHolder holder) :surface被销毁的时候调用,如退出游戏画面,一般在该方法中停止绘图线程。

还需要获得SurfaceHolder,并添加回调函数,这样这三个方法才会执行。

SurfaceView实战

下面通过一个小demo来学习SurfaceView在实际项目中的使用,绘制一个精灵,该精灵有四个方向的行走动画,让精灵沿着屏幕四周不停的行走。

android surfaceview怎么绘制

要使用SurfaceView进行绘制,步骤如下:

1.用SurfaceView进行绘制,首先要创建一个类,继承 SurfaceView,同时这个类应该实现SurfaceHolder.Callback接口。

这个接口中的三个回调函数(surfaceChanged(SurfaceHolder holder, int format, int width, int height),surfaceCreated(SurfaceHolder holder),surfaceDestroyed(SurfaceHolder holder))分别对应Surface何时更改、创建和销毁。

2.对Surface对象的操作是通过SurfaceHolder来进行的。所以,在你的SurfaceView类初始化的时候,你需要调用 getHolder()来获得SurfaceHolder对象,然后用addCallback()加上回调接口(因为你的类实现了相应的接口,所以此处传入this即可)。

3.在你的SurfaceView类中应该建立一个线程类,处理绘制操作。为此,要向这个线程类传递上面获得的SurfaceHolder对象。

4.绘制:在线程类的run()方法中进行绘制操作,通过lockCanvas()方法获得Canvas对象,然后就可以用这个对象进行绘制,绘制完成后调用unlockCanvasAndPost(),传入Canvas对象,这时Surface将会按Canvas进行绘制。

注意:每次利用SurfaceHolder获得画布时,前一次的内容将会保留。

android surfacecreated怎么用

surfaceCreated(SurfaceHolder holder):当Surface第一次创建后会立即调用该函数。程序可以在该函数中做些和绘制界面相关的初始化工作,一般情况下都是在另外的线程来绘制界面,所以不要在这个函数中绘制Surface。 surfaceChanged(SurfaceHolder holder, int format, int width,int height):当Surface的状态(大小和格式)发生变化的时候会调用该函数,在surfaceCreated调用后该函数至少会被调用一次。 surfaceDestroyed(SurfaceHolder holder):当Surface被摧毁前会调用该函数,该函数被调用后就不能继续使用Surface了,一般在该函数中来清理使用的资源。

surfacechanged 什么时候调用

surfaceDestroyed这个函数什么时候被调用呢? 上网搜了一番,基本都说是surface被销毁的时候,才会调用surfaceDestroyed。问题又来了surface什么时候被销毁呢,大家都知道surface是surfaceview的一个专门用于画.

什么叫做蚕虫师爷

这是广东歇后语的一句,“师爷”是指古代在衙门里面帮官员出谋划策的那些幕僚(一般都出坏主意,在民间形象不佳),“蚕虫”就是民间养殖的,卖茧,用来织丝绸的那种昆虫——它们养到一定程度会自己吐丝把自己藏起来——看起来好像用细绳子团团捆住自己一样。“蚕虫师爷”字面直解意思就是 :好像蚕虫一样吐丝把自己捆起来的师爷。

这句歇后语整句就是“蚕虫师爷——造茧自绑”,寓意就是:常出坏主意的人最终自己会害死自己。

现代一般也指那些在老板身边专出坏主意、拍马屁的谋士类人物——大家这么叫他就是诅咒他终有一天自食其果。

Camera中surfaceHolder、surfaceChanged问题,请大牛进来指点一二

近些天因为要调整打开照相机的速度性能问题,所以就跟了一下打开照相机的onCreate和onResume方法。在onCreate中有:[mw_shl_code=java,true]SurfaceHolder… 详细

(责任编辑:IT教学网)

更多

相关综合特效文章

推荐综合特效文章