- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                【精选】android的图像图像绘图-surfaceview
                    android的图像图像-SurfaceView类 * View和SurfaceView View类是android的一个超类,每一个View都有一个用于绘画的画布,这个画布可以进行任意的扩展。有的时候我们需要自定义VIew实现自己想要的视图。view、SurfaceView是游戏开发中经常用到的视图。 View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。 SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。 View的缺陷 View缺乏双缓冲机制 当程序需要更新View上的图像时,必须重绘View上显示的整张图片。 SurfaceView 类 SurfaceView是从View基类中派生出来的显示类,直接子类有GLSurfaceView和VideoView,GL和视频播放以及Camera摄像头一般均使用SurfaceView.  SurfaceView可以控制表面的格式,比如大小、显示在屏幕中的位置,最关键是的提供了SurfaceHolder类,使用getHolder方法获取,相关的方法有 lockCanvas()、 lockCanvas(Rect dirty)? 、 removeCallback(Callback callback)、 unlockCanvasAndPost(Canvas canvas) 控制图形以及绘制。 对于Surface,Android底层还提供了GPU加速功能,所以一般实时性很强的应用中主要使用SurfaceView而不是直接从View 构建,同时Android后面用到的OpenGL中的GLSurfaceView也是从该类实现。  * callback接口  只要继承SurfaceView类并实现SurfaceHolder.Callback接口就可以实现一个自定义的SurfaceView,SurfaceHolder.Callback在底层的Surface状态发生变化的时候通知View,SurfaceHolder.Callback具有如下的接口: surfaceCreated(SurfaceHolder holder):当Surface第一次创建后会立即调用该函数。程序可以在该函数中做些和绘制界面相关的初始化工作,一般情况下都是在另外的线程来绘制界面,所以不要在这个函数中绘制Surface。 surfaceChanged(SurfaceHolder holder, int format, int width,int height):当Surface的状态(大小和格式)发生变化的时候会调用该函数,在surfaceCreated调用后该函数至少会被调用一次。 注意:一个SurfaceView只在SurfaceHolder.Callback.surfaceCreated() 和  SurfaceHolder.Callback.surfaceDestroyed()调用之间是可用的,其他时间是得不到 它的Canvas对象的(null)。 Android-surfaceView 与View 的区别  SurfaceView和View最本质的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面,而View必须在UI的主线程中更新画面。那么在UI的主线程中更新画面 可能会引发问题,比如更新画面的时间过长,那么主UI线程会被正在绘制的函数阻塞。那么将无法响应按键、触屏等消息。使用surfaceView ,由于是在新的线程中更新画面所以不会阻塞UI主线程。但这也带来了另外一个问题,就是事件同步。比如触屏了一下,需要surfaceView中 thread处理,一般就需要有一个event queue的设计来保存touch event,这会稍稍复杂一点,因为涉及到线程同步。所以基于以上,根据游戏特点,一般分成两类: 	(1 )被动更新画面的。比如棋类,这种用view就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。 因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。 	(2 )主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞主线程。所以显然view不合适,需要surfaceView来控制。 使用SurfaceView绘制矩形 *  public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);  
                您可能关注的文档
- 【精选】9个瑜伽体式全方位翘臀:臀大肌、臀中肌、臀小肌.pdf
 - 【精选】9个关于使用热图进行网站用户分析的小技巧.pdf
 - 【精选】9人力资源管理程序(m).doc
 - 【精选】9传感器信息融合的实例.doc
 - 【精选】9南方常见植物-藤本.pdf
 - 【精选】9企业基层领导艺术.ppt
 - 【精选】9历史专业毕业论文范文.doc
 - 【精选】9古诗两首---园地三.doc
 - 【精选】9卫星比武教案.doc
 - 【精选】9台电视机拼接方案 V3.0.pdf
 
- 【精选】Android应用自动化测试 - 理论、工具和实例.pdf
 - 【精选】AngularJS REST和自定义服务.pdf
 - 【精选】Android设备连接Traveler系统配置手册.doc
 - 【精选】Angiogenesis by Contrast-enhanced Gray-scale Sonography in Antigen-induced Arthritis in Rabbits.pdf
 - 【精选】AngularJS 静态模板.pdf
 - 【精选】AnjoyoJava04章节考试题.doc
 - 【精选】ann11 神经网络 第十一章 脉冲耦合神经网络.pdf
 - 【精选】ANSYS SCDM培训教程_第一章.pdf
 - 【精选】Ansys workbench Mech-Intro_14.0_L07_Thermal热分析.pdf
 - 【精选】ansys1__热分析.ppt
 
原创力文档
                        

文档评论(0)