android的图像图像绘图surfacev

android的图像图像绘图surfacev

ID:39960432

大小:1.15 MB

页数:18页

时间:2019-07-16

android的图像图像绘图surfacev_第1页
android的图像图像绘图surfacev_第2页
android的图像图像绘图surfacev_第3页
android的图像图像绘图surfacev_第4页
android的图像图像绘图surfacev_第5页
资源描述:

《android的图像图像绘图surfacev》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、android的图像图像-SurfaceView类2021/8/28View和SurfaceViewView类是android的一个超类,每一个View都有一个用于绘画的画布,这个画布可以进行任意的扩展。有的时候我们需要自定义VIew实现自己想要的视图。view、SurfaceView是游戏开发中经常用到的视图。View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新

2、界面速度比view快。View的缺陷View缺乏双缓冲机制当程序需要更新View上的图像时,必须重绘View上显示的整张图片。SurfaceView类SurfaceView是从View基类中派生出来的显示类,直接子类有GLSurfaceView和VideoView,GL和视频播放以及Camera摄像头一般均使用SurfaceView.SurfaceView可以控制表面的格式,比如大小、显示在屏幕中的位置,最关键是的提供了SurfaceHolder类,使用getHolder方法获取,相关的方法有lockCanvas()、lockCanvas(Rectdirty)、r

3、emoveCallback(Callbackcallback)、unlockCanvasAndPost(Canvascanvas)控制图形以及绘制。对于Surface,Android底层还提供了GPU加速功能,所以一般实时性很强的应用中主要使用SurfaceView而不是直接从View构建,同时Android后面用到的OpenGL中的GLSurfaceView也是从该类实现。2021/8/28callback接口只要继承SurfaceView类并实现SurfaceHolder.Callback接口就可以实现一个自定义的SurfaceView,SurfaceHold

4、er.Callback在底层的Surface状态发生变化的时候通知View,SurfaceHolder.Callback具有如下的接口:surfaceCreated(SurfaceHolderholder):当Surface第一次创建后会立即调用该函数。程序可以在该函数中做些和绘制界面相关的初始化工作,一般情况下都是在另外的线程来绘制界面,所以不要在这个函数中绘制Surface。surfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight):当Surface的状态(大小和格式)发生变化的时候会调用该

5、函数,在surfaceCreated调用后该函数至少会被调用一次。注意:一个SurfaceView只在SurfaceHolder.Callback.surfaceCreated()和SurfaceHolder.Callback.surfaceDestroyed()调用之间是可用的,其他时间是得不到它的Canvas对象的(null)。Android-surfaceView与View的区别SurfaceView和View最本质的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面,而View必须在UI的主线程中更新画面。那么在UI的主线程中更新画面

6、可能会引发问题,比如更新画面的时间过长,那么主UI线程会被正在绘制的函数阻塞。那么将无法响应按键、触屏等消息。使用surfaceView,由于是在新的线程中更新画面所以不会阻塞UI主线程。但这也带来了另外一个问题,就是事件同步。比如触屏了一下,需要surfaceView中thread处理,一般就需要有一个eventqueue的设计来保存touchevent,这会稍稍复杂一点,因为涉及到线程同步。所以基于以上,根据游戏特点,一般分成两类:(1)被动更新画面的。比如棋类,这种用view就好了。因为画面的更新是依赖于onTouch来更新,可以直接使用invalidate

7、。因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。(2)主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞主线程。所以显然view不合适,需要surfaceView来控制。使用SurfaceView绘制矩形2021/8/28publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(newMyView(this));}classMyViewextendsSur

8、faceV

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。