版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、B03_b基於軟硬整合觀點应用Android的UI框架(b)- 以设计游戏循环(GameLoop)为例By 高煥堂基於軟硬整合觀點3、使用UI线程的MQ(Message Queue)/ myView.java/ public class myView extends View / Override protected void onDraw(Canvas canvas) super.onDraw(canvas);/ / canvas.drawRect(.);invalidate(); 我们可以透过Message方式来触发UI线程去調用invalidate()函数,而达到重新执行onDraw()
2、来进行重复绘图和刷新画面的动作。/ myView.java/.public class myView extends View private Paint paint= new Paint();private int line_x = 100, int line_y = 100; private float count = 0;private myHandler h;myView(Context ctx)super(ctx);h = new myHandler();Override protected void onDraw(Canvas canvas) super.onDraw(canvas
3、);if( count 12) count = 0;int x = (int) (75.0 * Math.cos(2*Math.PI * count/12.0); int y = (int) (75.0 * Math.sin(2*Math.PI * count/12.0); count+;canvas.drawColor(Color.WHITE); paint.setColor(Color.RED); paint.setStrokeWidth(3);canvas.drawLine(line_x, line_y, line_x+x, line_y+y, paint);paint.setStrok
4、eWidth(2); paint.setColor(Color.BLUE);canvas.drawRect(line_x-5, line_y - 5, line_x+5, line_y + 5, paint); paint.setColor(Color.YELLOW);canvas.drawRect(line_x-3, line_y - 3, line_x+3, line_y + 3, paint);h.removeMessages(0);Message msg = h.obtainMessage(0); h.sendMessageDelayed(msg, 1000);class myHand
5、ler extends Handler Overridepublic void handleMessage(Message msg) invalidate(); 使用sendMessageDelayed()函数来暂停一下,延迟数秒钟才传递 Message给UI线程。基於軟硬整合觀點4、诞生一个小线程, 担任游戏线程 刚才是由UI线程来丢Message到自己的 MQ里;也就是UI线程丢Message给自己。同 一 样 地 , 也 可 以 由 其 它 线 程 来 丢 Message到UI线程的MQ里,来触发UI线程去調用invalidate()函数。/ myView.java/ .public c
6、lass myView extends View private Paint paint= new Paint(); private int line_x = 100, line_y = 100; private float count = 0;private myHandler h;myView(Context ctx) super(ctx); h = new myHandler(); Override protected void onDraw(Canvas canvas) super.onDraw(canvas); if( count 12) count = 0;int x = (int
7、) (75.0 * Math.cos(2*Math.PI * count/12.0); int y = (int) (75.0 * Math.sin(2*Math.PI * count/12.0); count+;canvas.drawColor(Color.WHITE); paint.setColor(Color.RED); paint.setStrokeWidth(3);canvas.drawLine(line_x, line_y, line_x+x, line_y+y, paint); paint.setStrokeWidth(2);paint.setColor(Color.BLUE);
8、canvas.drawRect(line_x-5, line_y - 5, line_x+5, line_y + 5, paint); paint.setColor(Color.MAGENTA);canvas.drawRect(line_x-3, line_y - 3, line_x+3, line_y + 3, paint);/ myThread t = new myThread(); t.start();/ 诞生一个小线程,担任游戏线程,负责回圈控制class myThread extends Threadpublic void run() h.removeMessages(0);Mess
9、age msg = h.obtainMessage(0); h.sendMessageDelayed(msg, 1000);class myHandler extends Handler Override public void handleMessage(Message msg) invalidate(); / call onDraw(); UI线程诞生一个小线程,并且由该小线程去执行myThread类别里的run()函数。接着,这新线程执行到指令:h.r emoveMessages(0);Message msg = h.obtainMessage(0);h.s endMessageDela
10、yed(msg, 1000); 延迟数秒钟才传递 Message给UI线程(丢入UI线程的MQ里)。 当UI线程发现MQ有个Message,就去执行myHandler类别里的handleMessage()函数。就触发UI线程去調用invalidate()函数了。基於軟硬整合觀點5、小线程(非UI线程)調用postInvalidate() 刚才的小线程传递Message给UI线程(丢入UI线程的MQ里),触发UI线程去調用invalidate()函数。Android提供一个postInvalidate()函数来替代上述的动作。 由小线程直接去調用postInvalidate()函数, 就能间接触发UI线程去調用invalidate()函 数了。/ myView.java/public class myView extends View /.Override protected void onDraw(Canvas canvas) /.myThread t = new myThread(); t.start();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育管理学试题库及答案
- 正压送风机操作和维护保养规程
- 少儿拓展22智能收费站
- 消防水流指示器操作和维护保养规程
- 公路工程质量检验计划
- 2026年浙江省绍兴市网格员招聘考试参考题库及答案解析
- 2026年辽宁省本溪市网格员招聘考试参考题库及答案解析
- 2026年广西壮族自治区柳州市网格员招聘考试备考题库及答案解析
- 2026年黑龙江省齐齐哈尔市网格员招聘考试参考题库及答案解析
- 2026年乌海市海勃湾区网格员招聘笔试参考试题及答案解析
- 2026年山东济南市高三二模高考政治试卷试题(含答案详解)
- 2026年初中语文教师应聘答辩题及答案
- 2026江苏省农村商业银行系统春季校园招聘备考题库及答案详解(易错题)
- 泸州市兴泸投资集团有限公司招聘笔试题库2026
- 电力监控应急预案(3篇)
- 工业区位因素与工业布局导学案 高中地理湘教版(2019)必修二+
- 第一单元项目一探秘鸟类研究-认识数据、信息与知识课件沪科版(2019)高中信息技术必修1
- 日本跌宕50年一个制造业强国的沉浮史
- 电生磁 电磁铁的应用浙教版 八年级科学下册【思维导图+知识提要+典例提升】
- IE改善四大原则及ECRS技法课件
- 2023届浙江省名校协作体高三(上)开学考试物理试题
评论
0/150
提交评论