版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、B04_b基於軟硬整合觀點SurfaceView的UI多线程( b)By 高煥堂基於軟硬整合觀點2、使用SurfaceView画2D图 范例一 以SurfaceView绘出Bitmap图像 设计SpriteView类别来实作SurfaceHolder.Callback接口 首先来看个简单的程序,显示出一个Bitmap图像。这个图像就构成Sprite动画的基本图形。这个图像如下:此图像是取自网页的范例: /index.php/sprite-animation-with-android/此范例执行时呈现的画面:ActivityViewSurfaceView+ get
2、HolderQ . , SurfaceHolder+ addCallbackQ-一一一一一一 天)1千 il,嘈匾myActivitySpriteViewCallback 二 + sutfaceCreatedQ+ sutfaceDestroyedQ+ sutfaceChangedQ+ onDrawQActivityViewt ge r myActivity- - - - - - - - - - - - - - - - -.,;:i +SpriteView+ getHolderQ , .+ addCallbackQ? 气丞I 千 .il,倡sutface Created O 生 new今1 +
3、sutfaceDestroyed0+ sutfaceChangedQ+ onDrawQ/ SpriteView.java/ public class SpriteView implements SurfaceHolder.Callbackprivate SpriteThread sThread;private Paint paint;private Bitmap bm;public SpriteView(Bitmap bmp) bm = bmp;Override public void surfaceCreated(SurfaceHolder holder) sThread = new Spr
4、iteThread(holder, this); sThread.start();Override public void surfaceDestroyed(SurfaceHolder holder) Overridepublic void surfaceChanged(SurfaceHolder holder, int format,int width, int height) protected void onDraw(Canvas canvas) paint= new Paint(); canvas.drawColor(Color.WHITE); canvas.drawBitmap(bm
5、, 10, 10, paint);public class SpriteThread extends Threadprivate SpriteView mView; private SurfaceHolder mHolder; private Canvas c;SpriteThread(SurfaceHolder h, SpriteView v) mHolder = h mView = v;public void run()tryc = mHolder.lockCanvas(null);synchronized(mHolder) mView.o nDraw(c);finallyif(c!=nu
6、ll)mHolder.unlockCanvasAndPost(c);吁设计GameLoop大惘 l线程乔多如来)ActMty+ getHolderQ芒iViewiSurfaceHolder+ addCallbackQsu tfacj 忒Created QCallbackmyActMtySpriteView.,. 占 、 J片,-=: -:new:=-:=-+ sutfaceCreatedQ+ sutfaceDestroyedQ+ sutfaceChangedQ+ onDrawQ SpriteThread ,Ga me掠程 / SpriteView.java/ .public class Spr
7、iteView implements SurfaceHolder.Callbackprivate SpriteThread sThread;private Paint paint;private Bitmap bm;public SpriteView(Bitmap bmp) bm = bmp; Overridepublic void surfaceCreated(SurfaceHolder holder) sThread = new SpriteThread(holder, this); sThread.start();Overridepublic void surfaceDestroyed(
8、SurfaceHolder holder) Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) protected void onDraw(Canvas canvas) paint= new Paint(); canvas.drawColor(Color.WHITE); canvas.drawBitmap(bm, 10, 10, paint);/ SpriteThread.java/.public class SpriteThread extends Thread
9、private SpriteView mView; private SurfaceHolder mHolder; private Canvas c;SpriteThread(SurfaceHolder h, SpriteView v) mHolder = h;mView = v;public void run()tryc = mHolder.lockCanvas(null);synchronized (mHolder)mView.onDraw(c);finallyif(c!=null) mHolder.unlockCanvasAndPost(c); eit/ myActivity.java/
10、.public class myActivity extends Activityimplements OnClickListener private SurfaceView sv = null; private Button ibtn;private Bitmap bm;private SpriteView spView;Override protected void onCreate(Bundle icicle) super.onCreate(icicle);LinearLayout layout = new LinearLayout(this); layout.setOrientatio
11、n(LinearLayout.VERTICAL); sv = new SurfaceView(this);bm =BitmapFactory.decodeResource( getResour ces(), R.drawable.walk_elaine);spView = new SpriteView(bm); sv.getHolder().addCallback(spView);LinearLayout.LayoutParams param =new LinearLayout.LayoutParams(200, 200);param.topMargin = 10;param.leftMarg
12、in = 10; layout.addView(sv, param);/ ibtn = new Button(this); ibtn.setOnClickListener(this); ibtn.setText(Exit); ibtn.setBackgroundResource(R.drawable.gray); LinearLayout.LayoutParams param1 =new LinearLayout.LayoutParams(200, 65);param1.topMargin = 10;param1.leftMargin = 10; layout.addView(ibtn, pa
13、ram1); setContentView(layout);public void onClick(View v) finish();講罔:那一倏综程埶行Sp li t eView捚的onDraw ()函数呢? 范例二 让图像在SurfaceView里旋转复习:SurfaceViewSurfaceHolderThread+ runo-older.CallbackM沁urfaceViewstartODrawThread+ runo- I绘圉勹 在MySurfaceView里定义一个DrawThread类,它诞生一个单独的线程来执行画图的任务。 当主线程侦测到绘图画面(Surface)被开启时,就
14、会诞生DrawThread对象,启动新线程去画图。 一直到主要线程侦测到绘图画面被关闭时, 就停此正在绘图的线程。class MySurfaceView extends SurfaceViewimplements SurfaceHolder.Callback private SurfaceHolder mHolder;private DrawThread mThread;MySurfaceView(Context context) super(context); getHolder().addCallback(this);public void surfaceCreated(SurfaceHo
15、lder holder) mHolder = holder;mThread = new DrawThread(); mThread.start();public void surfaceDestroyed(SurfaceHolder holder) mThread.finish();mThread = null;public void surfaceChanged(SurfaceHolder holder, int format,int w, int h) class DrawThread extends Thread int degree = 36;boolean mFinished = f
16、alse;DrawThread() super(); Override public void run() Bitmap bmp= BitmapFactory.decodeResource(getResources(), R.drawable.x_xxx);Matrix matrix; degree = 0;while(!mFinished)Paint paint = new Paint();paint.setColor(Color.CYAN); Canvas cavans = mHolder.lockCanvas(); cavans.drawCircle(80, 80, 45, paint)
17、;/ rotate matrix = new Matrix();matrix.postScale(1.5f, 1.5f); matrix.postRotate(degree);Bitmap newBmp= Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);cavans.drawBitmap(newBmp, 50, 50, paint); mHolder.unlockCanvasAndPost(cavans); degree += 15;try Thread.sleep(100); catch (Exception e) void finish() mFinished = true; SurfaceViewThread+ runo-一一一一一一一一天 Surf ac 叫 Ider.CallbackM 贷 urfaceViewstarto,I鳍 DrawThread+ runop 勹一/ ac01.java-/.public class ac01 extends Activity Override protected void onCreate(Bundle icicle) super.onCreate(icicle);MySurf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年湖南省人民医院医护人员招聘笔试备考题库及答案详解
- 2026年同济大学附属同济医院医护人员招聘笔试备考试题及答案详解
- 2026年上海交通大学附属胸科医院医护人员招聘考试备考试题及答案详解
- 2026年山西中医学院中西医结合附属医院医护人员招聘考试参考题库及答案详解
- 2026年深圳市中医院医护人员招聘笔试备考题库及答案详解
- 2026年重庆三峡中心医院儿童分院医护人员招聘笔试备考试题及答案详解
- 2026年珠江医院医护人员招聘笔试备考试题及答案详解
- 2026年辽宁省金秋医院医护人员招聘考试参考题库及答案详解
- 2026年上海市眼病防治中心医护人员招聘笔试备考试题及答案详解
- 2026年惠州市第173医院医护人员招聘笔试备考试题及答案详解
- 2026届河南省郑州市郑州外国语达标名校中考英语全真模拟试卷含答案
- 304不锈钢圆管检验报告
- 护理学基础-卧位与安全
- 幼儿园故事绘本《猴子捞月》课件
- 弱电智能化工程施工方案与技术措施
- 公路水泥混凝土路面施工技术规范(JTGF30-2024)
- 病态窦房结综合征病例讨论
- 中国法律史-第三次平时作业-国开-参考资料
- 2024-2030全球与中国家用天然冻干宠物食品市场现状及未来发展趋势
- DLT 378-2010 变压器出线端子用绝缘防护罩通.用技术条件
- 兽医检验练习题和答案
评论
0/150
提交评论