当前位置:主页 > 技术文章 >

技术文章

Technical articles

Android应用之SurfaceView的双缓冲使用

时间:2021-06-28 05:43 点击次数:
  本文摘要:此次解读SurfaceView的双缓冲器用以。双缓冲器是为了更好地防止动漫闪亮而搭建的一种多线程运用于,根据SurfaceView的双缓冲器搭建很比较简单,进一条线程并在这其中绘图才可。文中解读根据SurfaceView的双缓冲器搭建,及其解读类似的更为高效率的搭建方式。 文中程序执行照片以下,左侧是进单独线程载入并绘图,右侧是进2个线程,一个专业上传图片,一个专业绘图:比照一下,右侧动漫的帧速明显比左侧的慢,上下两者都沒有用以Thread.sleep()。

欧洲杯线上买球

此次解读SurfaceView的双缓冲器用以。双缓冲器是为了更好地防止动漫闪亮而搭建的一种多线程运用于,根据SurfaceView的双缓冲器搭建很比较简单,进一条线程并在这其中绘图才可。文中解读根据SurfaceView的双缓冲器搭建,及其解读类似的更为高效率的搭建方式。

欧洲杯线上买球

欧洲杯线上买球

文中程序执行照片以下,左侧是进单独线程载入并绘图,右侧是进2个线程,一个专业上传图片,一个专业绘图:比照一下,右侧动漫的帧速明显比左侧的慢,上下两者都沒有用以Thread.sleep()。为何要进2个线程一个读书一个画,而没去进2个线程像左侧那般都边读书边画呢?由于SurfaceView每一次绘图都是会看准Canvas,换句话说同一片地区此次没画完后下一次就没法画,因而要提高双缓冲器的高效率,就得进一条线程专业绘图,进此外一条线程保证预备处理的工作中。main.xml的源代码:viewplaincopytoclipboardprint??xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=/apk/res/androidandroid:layout_width=fill_parentandroid:layout_height=fill_parentandroid:orientation=verticalLinearLayoutandroid:id=@ id/LinearLayout01android:layout_width=wrap_contentandroid:layout_height=wrap_contentButtonandroid:id=@ id/Button01android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=单独独立国家线程/ButtonButtonandroid:id=@ id/Button02android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=2个独立国家线程/Button/LinearLayoutSurfaceViewandroid:id=@ id/SurfaceView01android:layout_width=fill_parentandroid:layout_height=fill_parent/SurfaceView/LinearLayout?xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=/apk/res/androidandroid:layout_width=fill_parentandroid:layout_height=fill_parentandroid:orientation=verticalLinearLayoutandroid:id=@ id/LinearLayout01android:layout_width=wrap_contentandroid:layout_height=wrap_contentButtonandroid:id=@ id/Button01android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=单独独立国家线程/ButtonButtonandroid:id=@ id/Button02android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=2个独立国家线程/Button/LinearLayoutSurfaceViewandroid:id=@ id/SurfaceView01android:layout_width=fill_parentandroid:layout_height=fill_parent/SurfaceView/LinearLayout文中程序流程的源代码:viewplaincopytoclipboardprint?packagecom.testSurfaceView;importjava.lang.reflect.Field;importjava.util.ArrayList;importandroid.app.Activity;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.graphics.Canvas;importandroid.graphics.Paint;importandroid.graphics.Rect;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.SurfaceHolder;importandroid.view.SurfaceView;importandroid.view.View;importandroid.widget.Button;publicclasstestSurfaceViewextendsActivity{/**Calledwhentheactivityisfirstcreated.*/ButtonbtnSingleThread,btnDoubleThread;SurfaceViewsfv;SurfaceHoldersfh;ArrayListIntegerimgList=newArrayListInteger();intimgWidth,imgHeight;Bitmapbitmap;//独立国家线程载入,独立国家线程绘图@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);btnSingleThread=(Button)this.findViewById(R.id.Button01);btnDoubleThread=(Button)this.findViewById(R.id.Button02);btnSingleThread.setOnClickListener(newClickEvent());btnDoubleThread.setOnClickListener(newClickEvent());sfv=(SurfaceView)this.findViewById(R.id.SurfaceView01);sfh=sfv.getHolder();sfh.addCallback(newMyCallBack());//全自动经营surfaceCreated及其surfaceChanged}classClickEventimplementsView.OnClickListener{@OverridepublicvoidonClick(Viewv){if(v==btnSingleThread){newLoad_DrawImage(0,0).start();//进一条线程载入并绘图}elseif(v==btnDoubleThread){newLoadImage().start();//进一条线程载入newDrawImage(imgWidth 10,0).start();//进一条线程绘图}}}classMyCallBackimplementsSurfaceHolder.Callback{@OverridepublicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){Log.i(Surface:,Change);}@OverridepublicvoidsurfaceCreated(SurfaceHolderholder){Log.。


本文关键词:Android,应,用之,SurfaceView,的,双,欧洲杯线上买球,缓冲,使用,此次

本文来源:欧洲杯线上买球-www.gzdaibo.com

Copyright © 2009-2021 www.gzdaibo.com. 欧洲杯线上买球科技 版权所有 备案号:ICP备82644005号-8

在线客服 联系方式 二维码

服务热线

088-600118602

扫一扫,关注我们