当前位置:首页 > 项目展示
Android应用之SurfaceView的双缓冲使用|官方网站
时间:2020-12-16 来源:官方网站 浏览量 9514 次

am娱乐_这一次,SurfaceView的双缓冲区用于。双缓冲区是一个多线程应用程序,用于避免动画闪烁。基于SurfaceView的双缓冲区构造很简单,可以输入一个线程,在里面画。

本文解释了基于SurfaceView的双缓冲区的构造,并解释了一种类似于。这个程序的运行图如下。左边用单线程加载和绘制,右边用两个线程,一个加载图片,一个绘制。

相比之下,右边动画的帧率明显比左边慢,两者都不用于Thread.sleep()。为什么要进两个线程,一读一画,而不是像左边那样进两个线程,读和画?因为SurfaceView每次绘制的时候都会对准Canvas,这意味着如果这次没有完成,下次就不能绘制相同的区域。所以要提高双缓冲的效率,需要专门进入一个线程进行绘制,再进入另一个线程进行预处理工作。 main.xml的源码:viewplaincopytoclipboardprint?xmlversion=1.0encoding=utf-8?line layout xmlns : AnDroid=/apk/RES/AnDroid : layout _ width=fill _ parent AnDroid : layout _ height=fill _ parent AnDroid : orientation=verticallelarlayout AnDroid : id=@ id/line layout 01 AnDroid : layout _ width=wrap _ content AnDroid : layout _ height=wrap _ content buttonAnDroid : id=@ id/button 00单个独立国家线程/button button Android : id=@ id/button 02 Android : layout _ width=wrap _ content Android : layout _ height=wrap _ content Android :文本=两个独立国家线程/Button/line layoutsurfaceviewandrid : id=@ id/surface view 01 and radio : layout _ width=fill _ parentandrid : layout _ height=fill _ parent/surface view/line layout? xmlversion=1.0encoding=utf-8?line layout xmlns : AnDroid=/apk/RES/AnDroid : layout _ width=fill _ parent AnDroid : layout _ height=fill _ parent AnDroid : orientation=verticallelarlayout AnDroid : id=@ id/line layout 01 AnDroid : layout _ width=wrap _ content AnDroid : layout _ height=wrap _ content buttonAnDroid : id=@ id/button 00单个独立国家线程/button button Android : id=@ id/button 02 Android : layout _ width=wrap _ content Android : layout _ height=wrap _ content Android :文本=两个独立国家线程/Button/line layoutsurfaceviewandrid : id=@ id/surface view 01 and radio : layout _ width=fill _ parentandrid : layout _ height=fill _ parent/surface view/line layout本文程序的源码:viewplaincopytoclipboardprint? package 官方网站comTestSurface视图;导入Java。

朗。反思。字段;导入Java。

util。ArrayListimportandroid。

官方网站

app。活动;importandroid。图形。位图;importandroid。

图形。BitMapFactoryimportandroid。图形。

画布;重要的老了。图形。油漆;importandroid。

图形。rectimportandroid。

OS。捆绑;importandroid。util。

日志;importandroid。视图。表面支架;importandroid。

视图。表面视图;importandroid。视图。视图;importandroid。

小工具。按钮;publicClassTestSurfaceViewExtendsactivity {/* *调用了首次创建的活动。*/buttonbtnsinghtread,btndubletreadsurfaceviewsfvsurfaceholdersfharraylistegegrimlist=new arraylistegeer();intimgWidth,imgHeight位图位图;//独立国家线程加载,独立国家线程绘图@ override publication create(BundlesavedInstanceState){ super。

oncreate(savedInstanceState);setContentView(r . layout。main);btnsinghtread=(Button)这个。findviewbyid(r . id。

按钮01);btndublethread=(Button)这个。findviewbyid(r . id。

按钮02);btnsingthread。setonclicklistener(NewClickEvent());btndublethread。setonclicklistener(NewClickEvent());sfv=(表面视图)这个。findviewbyid(r . id。

表面视图01);sfh=sfv。GetHolder();sfh。add callback(NewMyCallback());//自动运营表面创建以及surface changed } class clickevent implements view .OnClickListener { @ OverridePublicationClick(Viewv){ if(v==BtnsingLethread){ NewLoad _ DrawImage(0,0).start();//进一条线程加载并绘图} else if(v==BTnDoubleThread){ NewLoadimage().start();//进一条线程加载新绘图图像(IMgwidth 10,0).start();//进一条线程绘图} } } class mycallbackimplessurfaceholder .回调{ @ override publicatavitysurfaceChanged(Surface holder holder,intformat,intwidth,in thigh){ log。

一(Surface :Change);} @ OverridePublicavitySurface创建(曲面支架){ Log .-am娱乐。

本文来源:官方网站-www.flexliga.com

版权所有十堰市官方网站科技有限公司 鄂ICP备71586101号-6

公司地址: 湖北省十堰市嵩县国发大楼433号 联系电话:0680-342432883

Copyright © 2018 Corporation,All Rights Reserved.

熊猫生活志熊猫生活志微信公众号
成都鑫华成都鑫华微信公众号