首页 文章 精选 留言 我的

精选列表

搜索[android jetpack],共10000篇文章
优秀的个人博客,低调大师

【读书笔记《Android游戏编程之从零开始》】13.游戏开发基础(Paint 画笔)

1.Paint画笔 Panit(画笔)是绘图额辅助类,其类中包含文字和位图额样式、颜色等属性信息。Paint 的常用方法如下: setAntiAlias(boolean aa) 作用:设置画笔是否无锯齿 参数:true 表示无锯齿,false 表示有锯齿,默认为 false 。 setAlpha(int a) 作用:设置画笔的透明度 参数:透明值 setTextAlign(Paint.Align align) 作用:设置绘制文本的锚点 参数:Paint.Align 类中的常量 measureText(String text) 作用:获取文本内容的宽度 参数:文本内容 setStyle(Style style) 作用:设置画笔样式 参数:样式实例 setColor(int color) 作用:设置画笔颜色 参数:色值 setStrokeWidth(float width) 作用:设置画笔额粗细程度 参数:画笔粗细值 setTextSize(float textSize) 作用:设置画笔在绘制文本时,文本字体的尺寸 参数:尺寸值 setARGB(int a,int r,int g,int b) 作用:设置画笔的ARGB分量 第一个参数:画笔透明度分量 第二个参数:画笔红色分量 第三个参数:画笔绿色分量 第四个参数:画笔蓝色分量 2.Paint 画笔实例 效果图如下: 步骤:新建项目“PanitProject”,游戏框架为MySurfaceView 游戏框架,具体步骤参照“11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)”。 主要绘图方法myDraw()修改如下: public void myDraw() { try { canvas =sfh.lockCanvas(); if(canvas!=null) { canvas.drawColor(Color.WHITE); //--设置画笔无锯齿 Paint paint1 = new Paint(); canvas.drawCircle(40,30,20,paint1); paint1.setAntiAlias(true); canvas.drawCircle(100,30,20,paint1); //--设置画笔的透明度 canvas.drawText("无透明度",100,70,new Paint()); Paint paint2 = new Paint(); paint2.setAlpha(0x77); canvas.drawText("半透明度",20,70,new Paint()); //--设置绘制文本的锚点 canvas.drawText("锚点",20,90,new Paint()); Paint paint3 = new Paint(); //设置以文本的中心点绘制 paint3.setTextAlign(Paint.Align.CENTER); canvas.drawText("锚点",20,105,paint3); //--获取文本的长度 Paint paint4 = new Paint(); float len = paint4.measureText("文本宽度:"); canvas.drawText("文本长度:"+len,20,130,new Paint()); //--设置画笔样式 canvas.drawRect(new Rect(20,140,40,160),new Paint()); Paint paint5 = new Paint(); //设置画笔不填充 paint5.setStyle(Paint.Style.STROKE); canvas.drawRect(new Rect(60,140,80,160),paint5); //--设置画笔颜色 Paint paint6 = new Paint(); paint6.setColor(Color.BLUE); canvas.drawText("蓝色",30,180,paint6); //--设置画笔的粗细程度 canvas.drawLine(20,200,70,200,new Paint()); Paint paint7 = new Paint(); paint7.setStrokeWidth(7); canvas.drawLine(20,220,70,220,paint7); //--设置画笔绘制文本的字体粗细 Paint paint8 = new Paint(); paint8.setTextSize(20); canvas.drawText("文字尺寸",20,260,paint8); //--设置画笔的ARGB 分量 Paint paint9 = new Paint(); paint9.setARGB(0x77,0xff,0x00,0x00); canvas.drawText("红色半透明",20,290,paint9); } } catch(Exception ex){ }finally { if(canvas!=null) { sfh.unlockCanvasAndPost(canvas); } } } Paint 画笔类提供了一个抗锯齿的函数,其实 Canvas 画布也提供额绘图抗锯齿的函数,如下所示: Canvas.setDrawFilter(DrawFilter filter); 作用:为画布设置绘图抗锯齿 参数:绘图过滤器实例 实例化一个DrawFilter 类的对象,代码如下所示: PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); 本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/p/4163012.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android内存优化4 了解java GC 垃圾回收机制2 GC执行finalize的过程

1. finalize的作用 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。 finalize()与C++中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Java中的finalize的调用具有不确定性 不建议用finalize方法完成“非内存资源”的清理工作,但建议用于:① 清理本地对象(通过JNI创建的对象);② 作为确保某些非内存资源(如Socket、文件等)释放的一个补充:在finalize方法中显式调用其他资源释放方法。其原因可见下文[finalize的问题] 2. finalize的问题 一些与finalize相关的方法,由于一些致命的缺陷,已经被废弃了,如System.runFinalizersOnExit()方法、Runtime.runFinalizersOnExit()方法 System.gc()与System.runFinalization()方法增加了finalize方法执行的机会,但不可盲目依赖它们 Java语言规范并不保证finalize方法会被及时地执行、而且根本不会保证它们会被执行 finalize方法可能会带来性能问题。因为JVM通常在单独的低优先级线程中完成finalize的执行 对象再生问题:finalize方法中,可将待回收对象赋值给GC Roots可达的对象引用,从而达到对象再生的目的 finalize方法至多由GC执行一次(用户当然可以手动调用对象的finalize方法,但并不影响GC对finalize的行为) 3. finalize的执行过程(生命周期) (1) 首先,大致描述一下finalize流程:当对象变成(GC Roots)不可达时,GC会判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。否则,若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。执行finalize方法完毕后,GC会再次判断该对象是否可达,若不可达,则进行回收,否则,对象“复活”。 (2) 具体的finalize流程: 对象可由两种状态,涉及到两类状态空间,一是终结状态空间F = {unfinalized, finalizable, finalized};二是可达状态空间R = {reachable, finalizer-reachable, unreachable}。各状态含义如下: unfinalized: 新建对象会先进入此状态,GC并未准备执行其finalize方法,因为该对象是可达的 finalizable: 表示GC可对该对象执行finalize方法,GC已检测到该对象不可达。正如前面所述,GC通过F-Queue队列和一专用线程完成finalize的执行 finalized: 表示GC已经对该对象执行过finalize方法 reachable: 表示GC Roots引用可达 finalizer-reachable(f-reachable):表示不是reachable,但可通过某个finalizable对象可达 unreachable:对象不可通过上面两种途径可达 状态变迁图: 变迁说明: 新建对象首先处于[reachable, unfinalized]状态(A) 随着程序的运行,一些引用关系会消失,导致状态变迁,从reachable状态变迁到f-reachable(B, C, D)或unreachable(E, F)状态 若JVM检测到处于unfinalized状态的对象变成f-reachable或unreachable,JVM会将其标记为finalizable状态(G,H)。若对象原处于[unreachable, unfinalized]状态,则同时将其标记为f-reachable(H)。 在某个时刻,JVM取出某个finalizable对象,将其标记为finalized并在某个线程中执行其finalize方法。由于是在活动线程中引用了该对象,该对象将变迁到(reachable, finalized)状态(K或J)。该动作将影响某些其他对象从f-reachable状态重新回到reachable状态(L, M, N) 处于finalizable状态的对象不能同时是unreahable的,由第4点可知,将对象finalizable对象标记为finalized时会由某个线程执行该对象的finalize方法,致使其变成reachable。这也是图中只有八个状态点的原因 程序员手动调用finalize方法并不会影响到上述内部标记的变化,因此JVM只会至多调用finalize一次,即使该对象“复活”也是如此。程序员手动调用多少次不影响JVM的行为 若JVM检测到finalized状态的对象变成unreachable,回收其内存(I) 若对象并未覆盖finalize方法,JVM会进行优化,直接回收对象(O) 注:System.runFinalizersOnExit()等方法可以使对象即使处于reachable状态,JVM仍对其执行finalize方法 4. 一些代码示例 (1) 对象复活 [java] view plain copy publicclasspublicstaticnullpublicstaticvoidthrowsnewnull); ifnull elsenull); ifnullelse protectedvoidthrowssuperthis} (2)覆盖finalize方法以确保资源释放 作为一个补充操作,以防用户忘记“关闭“资源,JDK中FileInputStream、FileOutputStream、Connection类均用了此”技术“,下面代码摘自FileInputStream类 [java] view plain copy /** *Ensuresthatthe<code>close</code>methodofthisfileinputstreamis *calledwhentherearenomorereferencestoit. * *@exceptionIOExceptionifanI/Oerroroccurs. *@seejava.io.FileInputStream#close() */protectedvoidthrowsifnull*willensurethatfinalizerisonlycalledwhen *safetodoso.Allreferencesusingthefdhave *becomeunreachable.Wecancallclose() */} 参考: 12.6 Finalization of Class Instanceshttps://notendur.hi.is//~snorri/SDK-docs/lang/lang083.htm 深入理解java的finalizehttp://zhang-xzhi-xjtu.iteye.com/blog/484934 The Finalizable Object http://www.artima.com/interfacedesign/Finalizable.htm 本文转自 一点点征服 博客园博客,原文链接: http://www.cnblogs.com/ldq2016/p/8469860.html ,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册