Android LayoutInflater原理分析,带你一步步深入了解View(一)

转载:http://blog.csdn.net/guolin_blog/article/details/12921889 有段时间没写博客了,感觉都有些生疏了呢。最近繁忙的工作终于告一段落,又有时间写文章了,接下来还会继续坚持每一周篇的节奏。 有不少朋友跟我反应,都希望我可以写一篇关于View的文章,讲一讲View的工作原理以及自定义View的方法。没错,承诺过的文章我是一定要兑现的,而且在View这个话题上我还准备多写几篇,尽量能将这个知识点讲得透彻一些。那么今天就从LayoutInflater开始讲起吧。 相信接触Android久一点的朋友对于LayoutInflater一定不会陌生,都会知道它主要是用于加载布局的。而刚接触Android的朋友可能对LayoutInflater不怎么熟悉,因为加载布局的任务通常都是在Activity中调用setContentView()方法来完成的。其实setContentView()方法的内部也是使用LayoutInflater来加载布局的,只不过这部分源码是internal的,不太容易查看到。那么今天我们就来把LayoutInflater的工作流程仔细地剖析一遍,也许还能解决掉某些困扰你心头多年的疑惑。 先来看一下LayoutInflater的基本用法吧,它的用法非常简单,首先需要获取到LayoutInflater的实例,有两种方法可以获取到,第一种写法如下: **[java]** [view plain](http://blog.csdn.net/guolin_blog/article/details/12921889#)[copy](http://blog.csdn.net/guolin_blog/article/details/12921889#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/118597)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/118597/fork) <div> <embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_1"> </embed> </div> </div> - LayoutInflater layoutInflater = LayoutInflater.from(context); 当然,还有另外一种写法也可以完成同样的效果: **[java]** [view plain](http://blog.csdn.net/guolin_blog/article/details/12921889#)[copy](http://blog.csdn.net/guolin_blog/article/details/12921889#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/118597)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/118597/fork) <div> <embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_2"> </embed> </div> </div> - LayoutInflater layoutInflater = (LayoutInflater) context - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 其实第一种就是第二种的简单写法,只是Android给我们做了一下封装而已。得到了LayoutInflater的实例之后就可以调用它的inflate()方法来加载布局了,如下所示: **[java]** [view plain](http://blog.csdn.net/guolin_blog/article/details/12921889#)[copy](http://blog.csdn.net/guolin_blog/article/details/12921889#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/118597)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/118597/fork) <div> <embed id="ZeroClipboardMovie_3" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_3"> </embed> </div> </div> - layoutInflater.inflate(resourceId, root); inflate()方法一般接收两个参数,第一个参数就是要加载的布局id,第二个参数是指给该布局的外部再嵌套一层父布局,如果不需要就直接传null。这样就成功成功创建了一个布局的实例,之后再将它添加到指定的位置就可以显示出来了。 ...

2015年4月1日 · 12 分钟 · 天边的星星

Android资源推荐

AndroidDevTools Google Android官方教程 Android Training Course in Chinese Android基础 上面可能是一个比较全面系统的培训教程,对于新手们可能对某些需要着重掌握的东西比较迷茫,于是整理下个人认为新手们必须要掌握的知识点,顺便也会附带相应觉得不错的讲解博客地址。 两分钟彻底让你明白Android Activity生命周期(图文)! Activity实际开发中使用频率最高,这个必须要理解 Android四大基本组件介绍与生命周期 Android中的四大组件必须得知道,也是面试常问到的 ListView的基本使用与优化 ListView是所有控件中最常使用且对新手来说比较复杂的用法,各种Adapter的使用以及ListView的优化都是必须掌握的 Android系统用于Activity的标准Intent Intent解决了Android中四大组件的通讯,非常有用,这篇博客收集整理了系统的标准Intent Android 屏幕适配 介绍一些Android屏幕适配的基础 Android中SQLite应用详解 Android中的SQLite需要掌握,这篇博客很适合新手 Android Fragment完全解析 3.0之后新加的Fragment,必须要掌握,目前使用的场景也是越来越普遍了 Android中级 Android应用程序的生命周期 Android的应用程序的生命周期需要理解,面试也是经常会被问的 带你一步步深入了解View View做为UI开发中最常用到的,必须要深入理解 Android Service完全解析 Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色 Android Gson 目前比较常用比较流行的数据格式就是json了,这篇博客教你如何使用Google Gson库来进行json解析 Android 布局优化 Android开发中经常会用到xml布局,那么布局优化方面的知识更是需要掌握的了 Android中Intent传递对象的两种方法(Serializable,Parcelable) 详细讲解了Android中Intent中如何传递对象 Android异步消息处理机制完全解析 Android开发中异步操作是经常使用的,必须理解掌握 Android AsyncTask完全解析 Android异步操作的另一种方法 Android Custom Loading 很早的一个小demo,教你如何做一个App的Loading动画 Android进阶 Android Gradle Google官方Android新的构建系统,可以很方便的管理依赖、编译打包等 Android 性能优化 一系列的性能调优教程,让你的代码以及App更畅通! 一个完整的开源项目–9GAG 一个开源客户端,教你使用Studio、Gradle以及一些流行的开源库快速开发一个不错的Android客户端 整理的Android开发资源 自己整理的一些Android开发资源,包括开发、工具、设计等,相信会对你有用的 Android设计 在开发一款Android App之前,你需要了解下Android平台的设计规范,这里有一系列关于Android Design的讲解以及Google最新推出的Material Design中文翻译版 Android Design Material Design Android兼容库 在了解了设计规范准备着手开发你的App时,你还需要考虑你的App支持的版本,如果是全新的App,从目前的市场份额来看,建议直接支持4.0+,虽然2.3的份额仍然有一部分,但是这部分真正用来使用App的人又能有多少呢。当然如果你的公司必须要求支持2.x的版本,那么也不用担心,下面整理了几个满足你适配的一些兼容库: ...

2015年4月1日 · 1 分钟 · 天边的星星

Android常用方法收集

/** 获取当前应用程序的版本号 */ private String getVersion() { String st = getResources().getString(R.string.Version_number_is_wrong); PackageManager pm = getPackageManager(); try { PackageInfo packinfo = pm.getPackageInfo(getPackageName(), 0); String version = packinfo.versionName; return version; } catch (NameNotFoundException e) { e.printStackTrace(); return st; } } 设置字符串点击启动指定Activity,部分字体高亮显示 // 创建一个 SpannableString对象 SpannableString sp = <span class="s1">new</span> SpannableString( <span class="s2"> getString(R.string.</span>activity_frogetpwd_newuserreader_str<span class="s2">));</span> // 设置超链接 <span class="s2"> Spanned.</span>SPAN_EXCLUSIVE_EXCLUSIVE<span class="s2">);</span> // 设置背景高亮样式一 // sp.setSpan(new BackgroundColorSpan(Color.RED), 17, 19, // Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置高亮样式二 <span class="s2"> Spannable.</span>SPAN_EXCLUSIVE_EXCLUSIVE<span class="s2">);</span> // // 设置斜体 // sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 27, // 29, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); myTextView.setText(sp); // 设置TextView可点击 myTextView.setMovementMethod(LinkMovementMethod.getInstance()); /** * 自定义URLSpan的点击事件 * * <span class="s1">@author</span> <span class="s2">jason</span> * */ <span class="s3">private</span> <span class="s3">class</span> MyURLSpan <span class="s3">extends</span> ClickableSpan { <span class="s3">private</span> String <span class="s4">mUrl</span>; MyURLSpan(String url) { <span class="s4">mUrl</span> = url; } @Override <span class="s3">public</span> <span class="s3">void</span> onClick(View widget) { Toast.makeText(RegisterActivity.<span class="s3">this</span>, <span class="s4">mUrl</span>, Toast.<span class="s4">LENGTH_LONG</span>) .show(); widget.setBackgroundColor(Color.parseColor(<span class="s6">&#8220;#00000000&#8221;</span>)); } }

2015年3月31日 · 1 分钟 · 天边的星星

Android自定义控件系列之应用篇——圆形进度条

**一、概述** 在上一篇博文中,我们给大家介绍了Android自定义控件系列的基础篇。链接: http://www.cnblogs.com/jerehedu/p/4360066.html 这一篇博文中,我们将在基础篇的基础上,再通过重写ondraw()方法和自定义属性实现圆形进度条,效果如图所示: **二、实现步骤** 1、 编写自定义组件MyCircleProgress扩展View <span class="keyword">public</span> <span class="class"><span class="keyword">class</span></span><span class="class"> <span class="title">MyCircleProgress</span> <span class="keyword">extends</span> <span class="title">View</span> {</span> … } 2、 在MyCircleProgress类中,定制属性 <span class="keyword">public</span> <span class="keyword">int</span> progress = <span class="number"></span>;<span class="comment">//</span><span class="comment">进度实际值,当前进度</span> <span class="javadoc">/**</span><span class="javadoc"> * 自定义控件属性,可灵活的设置圆形进度条的大小、颜色、类型等 */</span> <span class="keyword">private</span> <span class="keyword">int</span> mR;<span class="comment">//</span><span class="comment">圆半径,决定圆大小</span> <span class="keyword">private</span> <span class="keyword">int</span> bgColor;<span class="comment">//</span><span class="comment">圆或弧的背景颜色</span> <span class="keyword">private</span> <span class="keyword">int</span> fgColor;<span class="comment">//</span><span class="comment">圆或弧的前景颜色,即绘制时的颜色</span> <span class="keyword">private</span> <span class="keyword">int</span> drawStyle; <span class="comment">//</span><span class="comment">绘制类型 FILL画圆形进度条,STROKE绘制弧形进度条</span> <span class="keyword">private</span> <span class="keyword">int</span> strokeWidth;<span class="comment">//</span><span class="comment">STROKE绘制弧形的弧线的宽度</span> <span class="keyword">private</span> <span class="keyword">int</span> max;<span class="comment">//</span><span class="comment">最大值,设置进度的最大值</span> <span class="javadoc">/**</span><span class="javadoc"> * 设置进度,此为线程安全控件,由于考虑多线的问题,需要同步 */</span> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> setProgress(<span class="keyword">int</span> progress) { <span class="keyword">if</span>(progress&lt;<span class="number"></span>){ progress=<span class="number"></span>; }<span class="keyword">else</span> <span class="keyword">if</span>(progress&gt;max){ progress=max; }<span class="keyword">else</span>{ <span class="keyword">this</span>.progress = progress; } } <span class="keyword">public</span> <span class="keyword">int</span> getMax() { <span class="keyword">return</span> max; } 3、 为定制的属性编写attrs.xml资源,该资源文件放在res/values目录下,内容如下: ...

2015年3月31日 · 3 分钟 · 天边的星星

java中byte与 int、short、char、float、double之间的转换

由于java的字节序和网络字节序一致(高位在前),给出换算方法,亲测OK public static void main(String[] args) { byte[] bs=new byte[2]; short dvalue=1; Utils.putShort(bs, dvalue, 0); for (int i = 0; i < bs.length; i++) { System.out.println(bs[i]); } } /** 将32位的int值放到4字节的里 @param num @return */ public static byte[] int2byteArray(int num) { byte[] result = new byte[4]; result[0] = (byte) (num »> 24);// 取最高8位放到0下标 result[1] = (byte) (num »> 16);// 取次高8为放到1下标 result[2] = (byte) (num »> 8); // 取次低8位放到2下标 result[3] = (byte) (num); // 取最低8位放到3下标 return result; } /** ...

2015年3月30日 · 3 分钟 · 天边的星星

检测网站访问速度的方法

1、亲自打开网站,体会访问速度。 2、邀请QQ上不同地区的好友打开网站,体会访问速度。 3、通过第三方网站检测访问速度,推荐使用http://www.webkaka.com/,这个网站可以检测各地访问情况。 4、通过ping值情况检测。很多客户不知道如何去ping一个网站或IP,下面详细说明操作步骤: (1)点击开始菜单,再点击运行。 (2)输入ping www.yourdomain.com -t ,其中www.yourdomain.com换成您的域名或IP,点击确定。 (3)分析ping的结果一般50ms以内是非常快的,100ms以内的速度还可以接受。另外没有掉包,数值都是连续显示的,如果显示几行就掉包一次,那网站访问速度肯定不理想。 5、通过第三方网站检测ping值,如http://ping.chinaz.com(国内测试点),http://www.just-ping.com(全球测试点)。 网页载入速度对于一个网站来讲很关键,Google已经将一个网站的载入速度列入了网站关键字排名的考虑因素当中,也就是说如果你的网站有足够的内容,而且载入速度比别人的网站更快一步的话,那么你就是获得更好的排名。那么下面就赶快测试你的网站,提高网站访问速度吧。 1:用Ping命令简单测网站速度的方法 Ping可以用来检查网络是否通畅或者网络连接速度,点击开始→运行 在运行中输入“cmd”回车或点击确定,输入ping www.你的网址.com 就可以了。 用Ping命令简单测网站速度的方法-卢松松博客 (新手只需注意本图红框里的含义即可) Ping结果属于表示,bytes表示发送多少字节,time是时间,时间越小速度越快,TTL可以判断对方操作系统,TTL=119是XP系统,但TTL一般不准,服务器可以修改注册表更改TTL类型,更详细测速的办法,请多多搜索。 新手只需看最下面一行即可,最短时间、最长时间和平均时间(时间越短越好),这样你就能大致判断出网站的速度了。 同样,站长之家的ping工具也不错,网址:http://ping.chinaz.com/ 2:用tracert命令简单测网站速度的方法 测试方法和ping命令类似,只是ping换成tracert www.你的网址.com, tracert就是用来检测从终端客户到你的服务器所在机房的“跳数”和响应时间,也就是测试出服务器与全国各地客户的连接速度,当到达任何一个网关的时候,tracert会进行三次测试,并把三次测试的结果以ms为单位显示,当然time时间越短越好。 3:全方位的免费网站速度测试工具 — GTmetrix gtmetrix.com提供了丰富的详细的测量结果,它结合了Google Page Speed和Yahoo! YSlow的网页速度测试功能,并且提供可行的建议帮你改善网站速度。无需注册为会员即可使用该工具,并建议如何来优化网页中每个元素的,最重要的是会根据网站的具体情况,直接告诉你导致网站加载速度变慢的根源在哪里。 做为GTmetrix注册会员,你可以设置每天、每周或每月自动测试一次你的网站,可设置测试记录自动保存,还能够同时对4个网址进行对比测试。如果你不知道自己的载入速度到底是快还是慢,你可以输入一个名站来对比结果,比如Google.com 网址:http://gtmetrix.com 4:比较哪个网站载入速度较快 — WhichLoadsFaster 2010年7月7日,FastSoft推出免费动态网站加速互动演示网站 WhichLoadsFaster.com WhichLoadsFaster是一个免费公开网速测试工具,用以促进Web网站间良性竞争让网页浏览速度更快。 它是通过你的连接,在你的浏览器里,让两个真实的网页在你面前展示出来。所以使用WhichLoadsFaster是反应当前你的网络下来对比两个站的速度的。 网址:http://whichloadsfaster.com/ 5:国内免费的网站速度测试平台 — WebKaka 卡卡网是国内的一家帮你测试网站页面载入速度的免费站长工具,即时检测你的网站在全国各地访问的有效性、响应时间以及打开速度,目前在全国15个省市、美国、澳大利亚、日本等8个国家均设有检测点。此类网站速度测试工具基本都是国外的,国内的测速服务还比较少。卡卡网主要有网站速度测试、ping检测、路由追踪等功能。 网址:http://www.webkaka.com 当然还有其他很不错的在线网速测试的网站,比如speedtest.cn,speedtest.net等,同时,在你选择网站空间时,能用到本文的一些小方法,相信对你选择物美价廉的空间是个不错的办法

2015年3月30日 · 1 分钟 · 天边的星星

android多分辨率多屏幕密度下UI适配方案

相关概念 **分辨率:**整个屏幕的像素数目,为了表示方便一般用屏幕的像素宽度(水平像素数目)乘以像素高度表示,形如1280×720,反之分辨率为1280×720的屏幕,像素宽度不一定为1280 **屏幕密度:**表示单位面积内的像素个数,通常用dpi为单位,即每英寸多少个像素点 px**:**长度单位,以具体像素为单位 dp**:**长度单位,与具体屏幕密度无关,显示的时候根据具体平台屏幕密度的不同最终转换为相应的像素长度,具体转换规则是: 1dp =(目标屏幕密度/标准密度)*px,标准密度为160dpi,例如,1dp长度在密度为160dpi的平台表示一个像素的长度,而在240dpi的平台则表示1.5个像素的长度 **屏幕尺寸:**屏幕的大小,通常用屏幕对角线的长度表示 Android界面适配机制 UI界面在不同平台的适配受屏幕尺寸和屏幕密度影响,Android适配机制就是在资源后面添加对这两种因素的限定,通过不同的限定区分不同的平台资源,Android在使用资源的时候会优先选择满足本平台限定的资源,再找最接近条件的,再找默认(即不加限定),通过选择适合当前平台的资源来完成不同平台的适配。 屏幕尺寸分为:small,normal,large,xlarge分别表示小,中,大,超大屏 屏幕密度分为:ldpi,mdpi,hdpi,xhdpi,它们的标准值分别是:120dpi,160dpi,240dpi,320dpi 以上划分均表示的是一个范围: 在资源目录后面加上上面的限定就能为资源指定特定的适用平台,如下所示 表示大屏,中密度布局会选择上面那个main.xml,超大屏,中密度会选择下面那个main.xml 在实际开发过程中屏幕尺寸不够直观,android将其转换为分辨率表示,根据屏幕具体分辨率可选择相应的限定符 小结:通过加上上述限定可以实现一个apk适配几种主流的屏幕尺寸和屏幕密度,这种限定方式比较适用于对外发布应用,不知道终端具体参数的情况,但是不能做到精确适配,对于屏幕尺寸和密度相差不大的两种平台不能很好的区分。 为了解决上述问题,自Android3.2开始,引入了精确适配,理论上可以适配任意像素宽度,高度,屏幕密度的平台,需用以下方式添加限定符 其中w1280dp表示屏幕宽度为1280dp,h752dp表示屏幕高度为752dp,160dpi表示屏幕密度,其中屏幕宽,高必须以dp为单位,在知道屏幕像素宽高度的情况下可以通过公式:1dp = (目标屏幕密度/标准密度)*px 转换成dp单位。 例如:某平台屏幕宽,高分别为1920px,720px,屏幕密度为240dpi 适配该平台的限定为: 或者 根据公式1dp=(240/160)px=1.5px,宽度,高度转为dp单位分别是1280dp和480dp. Android自适应不同分辨率或不同屏幕大小的layout布局(横屏|竖屏) 一:不同的layout Android手机屏幕大小不一,有480×320, 640×360, 800×480.怎样才能让App自动适应不同的屏幕呢? 其实很简单,只需要在res目录下创建不同的layout文件夹,比如layout-640×360,layout-800×480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。 二:hdpi、mdpi、ldpi 在之前的版本中,只有一个drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。 drawable- hdpi、drawable- mdpi、drawable-ldpi的区别: (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480×800),FWVGA (480×854) (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320×480) (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240×320) 系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。 更正:应该是对应不同density 的图片 在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。 [i]备注:三者的解析度不一样,就像你把电脑的分辨率调低,图片会变大一样,反之分辨率高,图片缩小。 [/i] 屏幕方向: 横屏竖屏自动切换: 可以在res目录下建立layout-port-800×600和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,这样在手机屏幕方向变化的时候系统会自动调用相应的布局文件,避免一种布局文件无法满足两种屏幕显示的问题。 不同分辨率横屏竖屏自动切换: 以800×600为例 可以在res目录下建立layout-port-800×600和layout-land-800×600两个目录 不切换: 以下步骤是网上流传的,不过我自己之前是通过图形化界面实现这个配置,算是殊途同归,有空我会把图片贴上来。 还要说明一点:每个activity都有这个属性screenOrientation,每个activity都需要设置,可以设置为竖屏(portrait),也可以设置为无重力感应(nosensor)。 要让程序界面保持一个方向,不随手机方向转动而变化的处理办法: 在AndroidManifest.xml里面配置一下就可以了。加入这一行android:screenOrientation=”landscape”。 例如(landscape是横向,portrait是纵向): Java代码: <?xml version=”1.0″ encoding=”utf-8″?> <manifestxmlns:android=”http://schemas.android.com/apk/res/android” package=”com.ray.linkit” android:versionCode=”1″ android:versionName=”1.0″> <application android:icon=”@drawable/icon”android:label=”@string/app_name”> 另外,android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了! 有的程序适合从竖屏切换到横屏,或者反过来,这个时候怎么办呢?可以在配置Activity的地方进行如下的配置android:screenOrientation=”portrait”。这样就可以保证是竖屏总是竖屏了,或者landscape横向。 而 有的程序是适合横竖屏切换的。如何处理呢?首先要在配置Activity的时候进行如下的配 置:android:configChanges=”keyboardHidden|orientation”,另外需要重写Activity的 onConfigurationChanged方法。实现方式如下,不需要做太多的内容: ...

2015年3月24日 · 2 分钟 · 天边的星星

oschina-app源码分析-提醒标签BadgeView使用方法https://github.com/chenupt/BezierDemo

看过oschina-app的数字提醒标签BadgeView的使用过程,才发现以前项目中的实现逻辑有问题。以前待的项目组没个牛人,从我干第一个项目就我负责开发设计和管理,可想而知,顶多也就实现功能交工。说到底就是经验不足,所以有时间还是多看看别人的代码。本来是想主要讲oschina-app里面提醒标签的实现逻辑,但我觉得标签控件BadgeView有必要说下。 BadgeView是一个开源的ui项目,其实就一个ui工具类,BadgeView是对TextView的重写,他的代码就不贴了,可以到git上下最新的吧:https://github.com/jgilfelt/android-viewbadger 在这里主要说下他的用法,它可以设置标签的背景、颜色、位置、动画、文字等,对一般的需求足以满足了,先看下git上demo的效果: 默认属性标签代码: **[java]** [view plain](http://blog.csdn.net/xiangxue336/article/details/21073571#)[copy](http://blog.csdn.net/xiangxue336/article/details/21073571#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/230977)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/230977/fork) <div> <embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_1"> </embed> </div> </div> - <span class="comment">// *** default badge ***</span> - - View target = findViewById(R.id.default_target); - BadgeView badge = <span class="keyword">new</span> BadgeView(<span class="keyword">this</span>, target); - badge.setText(<span class="string">&#8220;1&#8221;</span>); - badge.show(); 默认是显示在右上角,红色的背景白色字体,这些个默认属性是可以在BadgeView里面设置的。 设置position代码: **[java]** [view plain](http://blog.csdn.net/xiangxue336/article/details/21073571#)[copy](http://blog.csdn.net/xiangxue336/article/details/21073571#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/230977)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/230977/fork) <div> <embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_2"> </embed> </div> </div> - <span class="comment">// *** set position ***</span> - - btnPosition = (Button) findViewById(R.id.position_target); - badge1 = <span class="keyword">new</span> BadgeView(<span class="keyword">this</span>, btnPosition); - badge1.setText(<span class="string">&#8220;12&#8221;</span>); - badge1.setBadgePosition(BadgeView.POSITION_CENTER); - btnPosition.setOnClickListener(<span class="keyword">new</span> OnClickListener() { - <span class="annotation">@Override</span> - <span class="keyword">public</span> <span class="keyword">void</span> onClick(View v) { - badge1.toggle(); - } - }); toggle方法是控制标签的现实和隐藏的。 ...

2015年3月24日 · 2 分钟 · 天边的星星

android中画虚线–.PathEffect类简单认识

Java代码 <embed src="http://androidbin.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash" width="14" height="15"> </embed> <a title="收藏这段代码">![收藏代码](http://androidbin.iteye.com/images/icon_star.png)</a> </div> - Paint p = <span class="keyword">new</span> Paint(Paint.ANTI_ALIAS_FLAG); - p.setStyle(Style.STROKE); - p.setColor(Color.WHITE); - p.setStrokeWidth(<span class="number">1</span>); - PathEffect effects = <span class="keyword">new</span> DashPathEffect(<span class="keyword">new</span> <span class="keyword">float</span>[] { <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>, <span class="number">8</span>}, <span class="number">1</span>); - p.setPathEffect(effects); - canvas.drawLine(<span class="number"></span>, <span class="number">40</span>, mWidth, <span class="number">40</span>, p); DashPathEffect是PathEffect类的一个子类,可以使paint画出类似虚线的样子,并且可以任意指定虚实的排列方式. 代码中的float数组,必须是偶数长度,且>=2,指定了多少长度的实线之后再画多少长度的空白. 如本代码中,绘制长度1的实线,再绘制长度2的空白,再绘制长度4的实线,再绘制长度8的空白,依次重复.1是偏移量,可以不用理会. 效果如下: 简单介绍下 PathEffect类: PathEffect是用来控制绘制轮廓(线条)的方式。 PathEffect对于绘制Path基本图形特别有用,但是它们也可以应用到任何Paint中从而影响线条绘制的方式。 使用PathEffect,可以改变一个形状的边角的外观并且控制轮廓的外表。 Android包含了多个PathEffect,包括: CornerPathEffect 可以使用圆角来代替尖锐的角从而对基本图形的形状尖锐的边角进行平滑。 ...

2015年3月22日 · 1 分钟 · 天边的星星

工程带有Fastjson或Gson等的第三方包的混淆配置

转自: http://blog.csdn.net/taotao19880301/article/details/17119249 工程中使用了fastjson,无奈,对工程做混淆的时候总是报错过不去,后来过去了又出现使用fastjson的地方数据不正确的问题,试了好多办法才成功,废话不多说,添加的代码: [view plain](http://www.programgo.com/article/6267404252/#) - ##&#8212;&#8212;&#8212;&#8212;&#8212;Begin: proguard configuration <span class="keyword">for</span> fastjson &#8212;&#8212;&#8212;- - - #-keepnames <span class="keyword">class</span> * <span class="keyword">implements</span> java.io.Serializable - -keep <span class="keyword">public</span> <span class="keyword">class</span> * <span class="keyword">implements</span> java.io.Serializable { - <span class="keyword">public</span> *; - } - -keepclassmembers <span class="keyword">class</span> * <span class="keyword">implements</span> java.io.Serializable { - <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">long</span> serialVersionUID; - <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> java.io.ObjectStreamField[] serialPersistentFields; - <span class="keyword">private</span> <span class="keyword">void</span> writeObject(java.io.ObjectOutputStream); - <span class="keyword">private</span> <span class="keyword">void</span> readObject(java.io.ObjectInputStream); - java.lang.Object writeReplace(); - java.lang.Object readResolve(); - } - -dontwarn android.support.** - -dontwarn com.alibaba.fastjson.** - - -dontskipnonpubliclibraryclassmembers - -dontskipnonpubliclibraryclasses - - -libraryjars libs/fastjson.jar - -keep <span class="keyword">class</span> com.alibaba.fastjson.** { *; } - - -keepclassmembers <span class="keyword">class</span> * { - <span class="keyword">public</span> <methods>; - } - - ##&#8212;&#8212;&#8212;&#8212;&#8212;End: proguard configuration <span class="keyword">for</span> fastjson &#8212;&#8212;&#8212;- Gson的混淆: ...

2015年3月17日 · 2 分钟 · 天边的星星