<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    woaide

     

    2012年6月25日

    同一個ImageView顯示不同的圖片--->level-list

    有時候,我們為了在一個ImageView中顯示不同的圖片,往往會使用:

    if (條件1)


    {

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


    else if (條件2)


    {

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

    可以用另一個簡便的方法實現相同的功能

    首先,在res/drawable下建立一個xml文件,內容如下
    <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 閱讀(149) | 評論 (0)編輯 收藏

    Android圖片內存優化

    1、將圖片轉化為縮略圖再加載:


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

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



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


    Android中有四種,分別是:


    ALPHA_8:每個像素占用1byte內存


    ARGB_4444:每個像素占用2byte內存


    ARGB_8888:每個像素占用4byte內存


    RGB_565:每個像素占用2byte內存


    Android默認的顏色模式為ARGB_8888,這個顏色模式色彩最細膩,顯示質量最高。但同樣的,占用的內存也最大。


    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模式讀出。內存減少雖然不如第一種方法明顯,但是對于大多數圖片,看不出與ARGB_8888模式有什么差別。不過在讀取有漸變效果的圖片時,可能有顏色條出現。另外,會影響圖片的特效處理。



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


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



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


    雖然使用Matrix對象放大圖片,必定會耗費更多的內存,但有時候也不得不這樣做。放大后的圖片使用的ARGB_8888顏色模式,就算原圖片是ARGB_4444顏色模式也一樣,而且沒有辦法在放大時直接指定顏色模式。可以采用以下辦法更改圖片顏色模式。



    復制代碼
    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 閱讀(2435) | 評論 (0)編輯 收藏

    僅列出標題  

    導航

    統計

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 女人裸身j部免费视频无遮挡| 成人免费区一区二区三区| 亚洲精品无码永久在线观看| a毛片全部播放免费视频完整18| 亚洲乱码中文字幕小综合| 免费v片视频在线观看视频| 97国免费在线视频| 亚洲av一本岛在线播放| 中文字幕日韩亚洲| 日韩免费一区二区三区在线 | 亚洲AV无码乱码国产麻豆穿越| 久草在视频免费福利| 国产成人无码精品久久久免费 | 黄页免费视频播放在线播放| 亚洲AV日韩AV高潮无码专区| 日本人的色道www免费一区| 十八禁无码免费网站| 国产成人精品亚洲一区| 亚洲成a人不卡在线观看| 国产综合精品久久亚洲| 最新猫咪www免费人成| 十八禁无码免费网站| 国产精品成人69XXX免费视频| 欧洲 亚洲 国产图片综合| 亚洲爆乳无码专区| 亚洲国产精品自产在线播放| 免费电影在线观看网站| 无码一区二区三区免费| 亚洲日韩在线观看免费视频| 亚洲av永久无码| 欧洲 亚洲 国产图片综合| 久久丫精品国产亚洲av不卡 | 校园亚洲春色另类小说合集| 亚洲国产成人久久99精品| 久久精品国产亚洲av成人| 亚洲午夜福利精品无码| 免费欧洲毛片A级视频无风险| 无码一区二区三区免费视频| 免费视频爱爱太爽了| 无码人妻一区二区三区免费看| 成人免费视频一区二区|