﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-woaide</title><link>http://www.blogjava.net/woaide/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 11:42:53 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 11:42:53 GMT</pubDate><ttl>60</ttl><item><title>同一个ImageView显示不同的图片---&gt;level-list </title><link>http://www.blogjava.net/woaide/archive/2012/06/25/381449.html</link><dc:creator>roselj</dc:creator><author>roselj</author><pubDate>Mon, 25 Jun 2012 11:31:00 GMT</pubDate><guid>http://www.blogjava.net/woaide/archive/2012/06/25/381449.html</guid><wfw:comment>http://www.blogjava.net/woaide/comments/381449.html</wfw:comment><comments>http://www.blogjava.net/woaide/archive/2012/06/25/381449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/woaide/comments/commentRss/381449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/woaide/services/trackbacks/381449.html</trackback:ping><description><![CDATA[<div><p>有时候，我们为了在一个ImageView中显示不同的图片，往往会使用： <wbr><br /><br />if (条件1)</p><br /><p>{ <wbr><br /><span style="white-space: pre;"> <wbr></span> <br />image.setBackground(R.id.xxx1); <wbr><br />}</p><br /><p>else if (条件2)</p><br /><p>{ <wbr><br /><span style="white-space: pre;"> <wbr></span> <br />image.setBackground(R.id.xxx2); <wbr><br />} <br />... <wbr><br /><br />可以用另一个简便的方法实现相同的功能 <wbr><br /><br />首先，在res/drawable下建立一个xml文件，内容如下 <wbr><br />&lt;level-list <br />xmlns:android='<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>'&gt;<br /> <wbr> <wbr> <wbr> <br />&lt;item android:maxLevel='0' android:drawable='@drawable/battery_0' <br />/&gt;<br /> <wbr> <wbr> <wbr> &lt;item android:maxLevel='1' <br />android:drawable='@drawable/battery_1' /&gt;<br /> <wbr> <wbr> <wbr> &lt;item <br />android:maxLevel='2' android:drawable='@drawable/battery_2' <br />/&gt;<br /> <wbr> <wbr> <wbr> &lt;item android:maxLevel='3' <br />android:drawable='@drawable/</p></div><img src ="http://www.blogjava.net/woaide/aggbug/381449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/woaide/" target="_blank">roselj</a> 2012-06-25 19:31 <a href="http://www.blogjava.net/woaide/archive/2012/06/25/381449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android图片内存优化</title><link>http://www.blogjava.net/woaide/archive/2012/06/25/381448.html</link><dc:creator>roselj</dc:creator><author>roselj</author><pubDate>Mon, 25 Jun 2012 10:52:00 GMT</pubDate><guid>http://www.blogjava.net/woaide/archive/2012/06/25/381448.html</guid><wfw:comment>http://www.blogjava.net/woaide/comments/381448.html</wfw:comment><comments>http://www.blogjava.net/woaide/archive/2012/06/25/381448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/woaide/comments/commentRss/381448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/woaide/services/trackbacks/381448.html</trackback:ping><description><![CDATA[
<div><p><strong><span style="font-size: 14pt;">1、将图片转化为缩略图再加载：</span></strong></p><br /><div class="cnblogs_code"><pre><span style="color: rgb(0, 128, 128);">1</span> BitmapFactory.Options options = <span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> BitmapFactory.Options();
</span><span style="color: rgb(0, 128, 128);">2</span> options.inSampleSize = 2<span style="color: rgb(0, 0, 0);">;
</span><span style="color: rgb(0, 128, 128);">3</span> Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); </pre></div><br /><p>该段代码即是读取1.png的缩略图，长度、宽度都只有原图片的1/2。图片大小减少，占用的内存自然也变小了。这么做的弊端是图片质量变差，inSampleSize的值越大，图片的质量就越差。由于各手机厂商缩放图片的算法不同，在不同手机上的缩放图片质量可能会不同。笔者就遭遇过moto手机上图片缩放后质量可以接受，三星手机上同样的缩放比例，质量却差很多的情况。</p><br /><p> </p><br /><p><span style="font-size: 14pt;"><strong>2、用ARBG_4444颜色模式加载图片：</strong></span></p><br /><p>Android中有四种，分别是：</p><br /><p>ALPHA_8：每个像素占用1byte内存</p><br /><p>ARGB_4444:每个像素占用2byte内存</p><br /><p>ARGB_8888:每个像素占用4byte内存</p><br /><p>RGB_565:每个像素占用2byte内存</p><br /><p>Android默认的颜色模式为ARGB_8888，这个颜色模式色彩最细腻，显示质量最高。但同样的，占用的内存也最大。</p><br /><div class="cnblogs_code"><pre><span style="color: rgb(0, 128, 128);">1</span> BitmapFactory.Options options = <span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> BitmapFactory.Options();
</span><span style="color: rgb(0, 128, 128);">2</span> options.inPreferredConfig =<span style="color: rgb(0, 0, 0);"> Bitmap.Config.ARGB_4444;    
</span><span style="color: rgb(0, 128, 128);">3</span> Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); </pre></div><br /><p>以上代码即是将1.png以ARGB_4444模式读出。内存减少虽然不如第一种方法明显，但是对于大多数图片，看不出与ARGB_8888模式有什么差别。不过在读取有渐变效果的图片时，可能有颜色条出现。另外，会影响图片的特效处理。</p><br /><p> </p><br /><p><strong><span style="font-size: 14pt;">3、调用图片的recycle()方法：</span></strong></p><br /><p>这个其实不是真正降低图片内存的方法。主要目的是标记图片对象，方便回收图片对象的本地数据。图片对象的本地数据占用的内存最大，而且与程序Java部分的内存是分开计算的。所以经常出现Java <br />heap足够使用，而图片发生OutOfMemoryError的情况。在图片不使用时调用该方法，可以有效降低图片本地数据的峰值，从而减少OutOfMemoryError的概率。不过调用了recycle()的图片对象处于&#8220;废弃&#8221;状态，调用时会造成程序错误。所以在无法保证该图片对象绝对不会被再次调用的情况下，不建议使用该方法。特别要注意已经用setImageBitmap(Bitmap <br />img)方法分配给控件的图片对象，可能会被系统类库调用，造成程序错误。</p><br /><p> </p><br /><p><strong><span style="font-size: 14pt;">4、使用Matrix对象放大的图片如何更改颜色模式：</span></strong></p><br /><p>虽然使用Matrix对象放大图片，必定会耗费更多的内存，但有时候也不得不这样做。放大后的图片使用的ARGB_8888颜色模式，就算原图片是ARGB_4444颜色模式也一样，而且没有办法在放大时直接指定颜色模式。可以采用以下办法更改图片颜色模式。</p><br /><div class="cnblogs_code"><br /><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre>Matrix matrix = <span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Matrix();
</span><span style="color: rgb(0, 0, 255);">float</span> newWidth = 200;<span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">图片放大后的宽度</span>
<span style="color: rgb(0, 0, 255);">float</span> newHeight = 300;<span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">图片放大后的长度</span>
matrix.postScale(newWidth / img.getWidth(), newHeight/<span style="color: rgb(0, 0, 0);"> img.getHeight());
Bitmap img1 </span>= Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, <span style="color: rgb(0, 0, 255);">true</span>);<span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">得到放大的图片</span>
img2 = img1.copy(Bitmap.Config.ARGB_4444, <span style="color: rgb(0, 0, 255);">false</span>);<span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">得到ARGB_4444颜色模式的图片</span>
img = <span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;
img1 </span>= <span style="color: rgb(0, 0, 255);">null</span>;</pre></div></div> 
<img src ="http://www.blogjava.net/woaide/aggbug/381448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/woaide/" target="_blank">roselj</a> 2012-06-25 18:52 <a href="http://www.blogjava.net/woaide/archive/2012/06/25/381448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>