woaide

           

          2012年6月25日

          同一個(gè)ImageView顯示不同的圖片--->level-list

          有時(shí)候,我們?yōu)榱嗽谝粋€(gè)ImageView中顯示不同的圖片,往往會(huì)使用:

          if (條件1)


          {

          image.setBackground(R.id.xxx1);
          }


          else if (條件2)


          {

          image.setBackground(R.id.xxx2);
          }
          ...

          可以用另一個(gè)簡便的方法實(shí)現(xiàn)相同的功能

          首先,在res/drawable下建立一個(gè)xml文件,內(nèi)容如下
          <level-list
          xmlns:android='
          <item android:maxLevel='0' android:drawable='@drawable/battery_0'
          />
          <item android:maxLevel='1'
          android:drawable='@drawable/battery_1' />
          <item
          android:maxLevel='2' android:drawable='@drawable/battery_2'
          />
          <item android:maxLevel='3'
          android:drawable='@drawable/

          posted @ 2012-06-25 19:31 roselj 閱讀(150) | 評論 (0)編輯 收藏

          Android圖片內(nèi)存優(yōu)化

          1、將圖片轉(zhuǎn)化為縮略圖再加載:


          1 BitmapFactory.Options options = new BitmapFactory.Options();
          2 options.inSampleSize = 2;
          3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); 

          該段代碼即是讀取1.png的縮略圖,長度、寬度都只有原圖片的1/2。圖片大小減少,占用的內(nèi)存自然也變小了。這么做的弊端是圖片質(zhì)量變差,inSampleSize的值越大,圖片的質(zhì)量就越差。由于各手機(jī)廠商縮放圖片的算法不同,在不同手機(jī)上的縮放圖片質(zhì)量可能會(huì)不同。筆者就遭遇過moto手機(jī)上圖片縮放后質(zhì)量可以接受,三星手機(jī)上同樣的縮放比例,質(zhì)量卻差很多的情況。



          2、用ARBG_4444顏色模式加載圖片:


          Android中有四種,分別是:


          ALPHA_8:每個(gè)像素占用1byte內(nèi)存


          ARGB_4444:每個(gè)像素占用2byte內(nèi)存


          ARGB_8888:每個(gè)像素占用4byte內(nèi)存


          RGB_565:每個(gè)像素占用2byte內(nèi)存


          Android默認(rèn)的顏色模式為ARGB_8888,這個(gè)顏色模式色彩最細(xì)膩,顯示質(zhì)量最高。但同樣的,占用的內(nèi)存也最大。


          1 BitmapFactory.Options options = new BitmapFactory.Options();
          2 options.inPreferredConfig = Bitmap.Config.ARGB_4444;    
          3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); 

          以上代碼即是將1.png以ARGB_4444模式讀出。內(nèi)存減少雖然不如第一種方法明顯,但是對于大多數(shù)圖片,看不出與ARGB_8888模式有什么差別。不過在讀取有漸變效果的圖片時(shí),可能有顏色條出現(xiàn)。另外,會(huì)影響圖片的特效處理。



          3、調(diào)用圖片的recycle()方法:


          這個(gè)其實(shí)不是真正降低圖片內(nèi)存的方法。主要目的是標(biāo)記圖片對象,方便回收圖片對象的本地?cái)?shù)據(jù)。圖片對象的本地?cái)?shù)據(jù)占用的內(nèi)存最大,而且與程序Java部分的內(nèi)存是分開計(jì)算的。所以經(jīng)常出現(xiàn)Java
          heap足夠使用,而圖片發(fā)生OutOfMemoryError的情況。在圖片不使用時(shí)調(diào)用該方法,可以有效降低圖片本地?cái)?shù)據(jù)的峰值,從而減少OutOfMemoryError的概率。不過調(diào)用了recycle()的圖片對象處于“廢棄”狀態(tài),調(diào)用時(shí)會(huì)造成程序錯(cuò)誤。所以在無法保證該圖片對象絕對不會(huì)被再次調(diào)用的情況下,不建議使用該方法。特別要注意已經(jīng)用setImageBitmap(Bitmap
          img)方法分配給控件的圖片對象,可能會(huì)被系統(tǒng)類庫調(diào)用,造成程序錯(cuò)誤。



          4、使用Matrix對象放大的圖片如何更改顏色模式:


          雖然使用Matrix對象放大圖片,必定會(huì)耗費(fèi)更多的內(nèi)存,但有時(shí)候也不得不這樣做。放大后的圖片使用的ARGB_8888顏色模式,就算原圖片是ARGB_4444顏色模式也一樣,而且沒有辦法在放大時(shí)直接指定顏色模式??梢圆捎靡韵罗k法更改圖片顏色模式。



          復(fù)制代碼
          Matrix matrix = new Matrix();
          float newWidth = 200;//圖片放大后的寬度
          float newHeight = 300;//圖片放大后的長度
          matrix.postScale(newWidth / img.getWidth(), newHeight/ img.getHeight());
          Bitmap img1 = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);//得到放大的圖片
          img2 = img1.copy(Bitmap.Config.ARGB_4444, false);//得到ARGB_4444顏色模式的圖片
          img = null;
          img1 = null;

          posted @ 2012-06-25 18:52 roselj 閱讀(2436) | 評論 (0)編輯 收藏

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 龙游县| 福泉市| 岚皋县| 新营市| 甘洛县| 河北省| 新津县| 吐鲁番市| 望城县| 旬邑县| 大港区| 含山县| 黄石市| 化州市| 盈江县| 封开县| 淮滨县| 含山县| 嘉义县| 大关县| 德清县| 潞城市| 尼玛县| 昌邑市| 扎兰屯市| 开远市| 南康市| 张掖市| 金华市| 甘泉县| 阿拉善左旗| 子洲县| 黄浦区| 郯城县| 犍为县| 资阳市| 文山县| 会泽县| 游戏| 林西县| 大同市|