位置: 编程技术 - 正文

Android学习之surfaceview(一)(android substrate)

编辑:rootadmin

推荐整理分享Android学习之surfaceview(一)(android substrate),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:androidfby,android substrate,android方法大全,android方法大全,android su,android surge,android surge,android surge,内容如对您有帮助,希望把文章链接给更多的朋友!

今天在学习Android游戏开发中的crazy football中遇到了一些问题。首先碰到的就是surfaceview相关的知识,由于之前没有接触过图像渲染方面的东西,觉得理解起来不太容易。因此专门将这个知识点拿出来学习一下。

Android学习之surfaceview(一)(android substrate)

学习surfaceview之前,肯定有必要先了解一下view的基本知识。其实简单理解view就是每个activity界面的显示效果。系统自带了很多种效果,例如各种各样的布局文件,就是其中的很多种效果。我们也可以自己定义自己的效果。最简单的就是我们新建一个画布,在画布上绘制我们自己想要看的东西。这也是一种显示效果。不过自己定义的view有一个致命的缺点,它的参数更改只能在UI线程中进行。若要执行的任务比较消耗时间,就会导致UI线程长期的等待,从而程序死掉。下面是一个简单的自定义view代码:

[java] view plaincopypackage com.example.test; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.View; public class AnimateViewActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new AnimateView(this));//這邊傳入的this代表這個對象, // setContentView(new DemoSurfaceView(this));//這邊傳入的this代表這個對象, // 因 為Activity是繼承自Content類的,因此該對象也 // 可向上轉型為Content類型作為 // AnimateView的構造方法的參數 } class AnimateView extends View{ float radius = ; Canvas canvas=new Canvas(); Paint paint=new Paint(); ; public AnimateView(Context context) { super(context); paint.setColor(Color.RED); paint.setStyle(Paint.Style.FILL_AND_STROKE); //onDraw(canvas); } @Override protected void onDraw(Canvas canvas) { canvas.translate(, ); canvas.drawCircle(, , radius&#;&#;, paint); if(radius > ){ radius = ; } invalidate();//通过调用这个方法让系统自动刷新视图 } } } 这段代码实现了不断更新圆圈半径的显示。改变的过程是通过ondraw方法中的invalidate()方法实现的。 下面来看看surfaceview的使用方法: 讲到surfaceVIEW,就得先提到与其相关联的其他几个名词:1,surface,2,surfaceholder,3 callback()首先来解释一下,surface其实就是一块内存区域,代表了一块显存。surfaceholder可以管理控制surfaceview,比如说控制画布canvas等callback()函数管理了surface生命周期的三个主要函数,oncreat,onchange,ondestroy. 使用的基本方法: 1,创建类继承surfaceview 并实现callback接口 2,初始化init,包括得到surfaceholder,(getholder()方法得到),利用holder来添加回调函数callback() 3, 新建一个线程,来处理生命周期中所需要处理的动作(可选)4, 在生命周期函数中,不断结束线程和开始线程,具体由动作决定(停止线程join()).下面是一段实例代码:(只需要在上一段代码中添加这一句,并注释上一句就行// setContentView(new DemoSurfaceView(this));//這邊傳入的this代表這個對象,) [java] view plaincopy package com.example.test; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; public class DemoSurfaceView extends SurfaceView implements Callback{ LoopThread thread; public DemoSurfaceView(Context context) { super(context); init(); //初始化,设置生命周期回调方法 } private void init(){ SurfaceHolder holder = getHolder(); holder.addCallback(this); //设置Surface生命周期回调 thread = new LoopThread(holder, getContext()); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { thread.isRunning = true; thread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { thread.isRunning = false; try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 执行绘制的绘制线程 * @author Administrator * */ class LoopThread extends Thread{ SurfaceHolder surfaceHolder; Context context; boolean isRunning; float radius = f; Paint paint; public LoopThread(SurfaceHolder surfaceHolder,Context context){ this.surfaceHolder = surfaceHolder; this.context = context; isRunning = false; paint = new Paint(); paint.setColor(Color.YELLOW); paint.setTextSize(); paint.setStyle(Paint.Style.STROKE); } @Override public void run() { Canvas c = null; while(isRunning){ try{ synchronized (surfaceHolder) { c = surfaceHolder.lockCanvas(null); doDraw(c); //通过它来控制帧数执行一次绘制后休息ms Thread.sleep(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { surfaceHolder.unlockCanvasAndPost(c); } } } public void doDraw(Canvas c){ //这个很重要,清屏操作,清楚掉上次绘制的残留图像 c.drawColor(Color.BLACK); c.translate(, ); c.rotate(); // c.drawCircle(,, radius&#;&#;, paint); c.drawText("hello"&#;radius&#;&#;, , , paint); if(radius > ){ radius = f; } } } }

cocos2dx3.2 整体概览(三)—— Scene(场景) 上一节中对导演有了初步的认识,而导演只是控制好游戏的流程,具体游戏的内容却需要开发者去布置好一个一个的场景。因此在学习的过程中,我们

《三眼仔的突围战》Android射击游戏首发时日庆 全力阻挡住敌军,你方可生存《三仔的突围战》Android动作游戏是快开客的又一创意力作,玩家通过虚拟按键控制主角攻击靠拢而来的敌人,当Kill数达到

[置顶] 《戳洞洞》Android休闲奇葩游戏,正式上市啦! 《戳洞洞》Android坑爹游戏,游戏中玩家只有戳到洞,才能得分,其余任意不准确的戳的动作都会导致游戏失败,正确的预估距离将会是很好的游戏的保

标签: android substrate

本文链接地址:https://www.jiuchutong.com/biancheng/371267.html 转载请保留说明!

上一篇:cocos2dx3.2 整体概览(一)—— 渲染树(cocos2djs)

下一篇:cocos2dx3.2 整体概览(三)—— Scene(场景)(cocos2dx4.0教程)

  • 工业企业应缴纳的税金有哪些
  • 汇算清缴时房企毛利额有差异如何调整
  • 增值税附加税包括哪些税种及税率
  • 资产减值损失借方表示
  • 金税盘技术维护费怎么申报
  • 个人生产经营所得税
  • 资产处置损益是收入还是费用
  • 小微企业季报
  • 手撕定额发票不是免税怎么还报税
  • 小规模纳税人年应税销售额标准是
  • 没有借贷资质的公司对外放款
  • 长期待摊费用的摊销方法
  • 待摊费用按照入账金额还是合同金额摊销?
  • 开的是全额发票但是有分包如何做账务处理?
  • 关于转让费的问题
  • 房地产企业建造的商品楼属于存货对吗
  • 出差补贴是否缴纳个人所得税 北京
  • 移动电子发票怎么发送到邮箱
  • 工会经费的缴费主体
  • 研发费用的扣除比例是多少
  • 总包劳务工资发什么科目
  • 钢结构施工速度快吗
  • 本月进项税大于销项税不需要交税,电子税务局如何打印
  • 对外支付代扣代缴增值税如何申报
  • 短期投资损失
  • 应用程序发生异常 未知的软件异常(0xe06d7363)
  • 法人车无偿给公司使用合法吗
  • system 命令
  • linux系统中用户账户有哪些分类
  • 退货红冲发票要收回原发票吗
  • 误餐费怎么入账
  • sistray.exe - sistray是什么进程 有什么用
  • win10开始菜单设置无效
  • 怎样搭建php开发平台
  • 2020年外贸企业年终总结
  • 购买商品或服务赠品法律地位
  • laravel视频教程
  • 温哥华瀑布
  • nginx配置tp5
  • 离职赔偿金计入什么费用
  • php获取ipv6地址
  • php获取表单数据的方法和区别
  • python功能强大而深受欢迎的原因
  • vue路由使用方法
  • 员工食堂买菜
  • phpcms栏目分类
  • 个体户发票没有开户行和账号行吗
  • 进项税发票可以跨年认证吗
  • 顺风车没有发票可以税前扣除吗
  • 一件代发退货如何处理
  • 大气污染物排放2020标准
  • 税务法新规
  • 个体户增值税减免申报明细表怎么填
  • 向境外支付赔偿款是否需要税务备案
  • 残疾人保障金的工资总额怎么填
  • 增值税专票已经认证了还能退吗
  • 哪些合同不需要缴纳印花税的通知
  • 实业投资收益如何
  • 疫情期间统筹部工作总结
  • 年度利润总额的英文缩写
  • 查补以前年度所得税
  • 企业的借款利息费用,扣除标准是?
  • 工程项目增值税预缴税率
  • 客运服务费发票计入什么科目
  • 缴纳工会筹备金应该记什么科目
  • 注销公司需要多长时间完成
  • mysql使用教程
  • sql提取指定字符串
  • centos配置kdump
  • winxp如何设置文件共享
  • centos7添加桌面图标
  • linux批量管理平台
  • com.android.phone无响应
  • django orm sqlalchemy
  • easyui grid
  • jquery添加兄弟元素
  • express的中间件
  • 电子税务局怎么申报
  • 补充协议需要双方签字盖章吗
  • 北京市房产查询官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设