热门关键词:亚博足球直播,亚博直播间,亚博手机平台  
当前位置:首页 > 产品与服务 > 传感器
亚博手机平台|Android应用之SurfaceView的双缓冲使用
2020-12-01 [80306]

亚博手机平台:这一次,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 .。

本文来源:亚博足球直播-www.autoskolavatmar.com