在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 百戰(zhàn)經(jīng)典第八戰(zhàn)-BitmapFactory.Options對資源圖片進(jìn)行縮放
百戰(zhàn)經(jīng)典第二十戰(zhàn)-ListView中點(diǎn)擊button跳轉(zhuǎn)到撥號(hào)界面實(shí)例
百戰(zhàn)經(jīng)典第十一戰(zhàn)-GridView動(dòng)態(tài)添加Item
百戰(zhàn)經(jīng)典第二戰(zhàn)-好玩的Spinner控件
百戰(zhàn)經(jīng)典第五戰(zhàn)-各種對話框Dialog精彩薈萃
百戰(zhàn)經(jīng)典第八戰(zhàn)-BitmapFactory.Options對資源圖片進(jìn)行縮放
百戰(zhàn)經(jīng)典第四戰(zhàn)-玩轉(zhuǎn)ListView
百戰(zhàn)經(jīng)典第十五-竊聽風(fēng)云之短信監(jiān)聽
前言
百戰(zhàn)經(jīng)典第十四戰(zhàn)-網(wǎng)絡(luò)交互,基于Baas用戶表查詢功能實(shí)現(xiàn)
百戰(zhàn)經(jīng)典第九戰(zhàn)-ViewFlipper實(shí)現(xiàn)幻燈效果
百戰(zhàn)經(jīng)典第三戰(zhàn)-實(shí)現(xiàn)畫圖板
百戰(zhàn)經(jīng)典第十七戰(zhàn)-基于加速度傳感器的搖一搖功能實(shí)例
百戰(zhàn)經(jīng)典第十戰(zhàn)-LayoutAnimation布局動(dòng)畫效果
百戰(zhàn)經(jīng)典第七戰(zhàn)-顯示倒計(jì)時(shí)的Button按鈕
百戰(zhàn)經(jīng)典第六戰(zhàn)-Activity啟動(dòng)模式小樣
百戰(zhàn)經(jīng)典第十二戰(zhàn)-GridView動(dòng)態(tài)刪除Item
百戰(zhàn)經(jīng)典第十六戰(zhàn)-圖片或頭像設(shè)置功能
百戰(zhàn)經(jīng)典第十九戰(zhàn)-短信監(jiān)聽實(shí)現(xiàn)驗(yàn)證碼自動(dòng)填入
百戰(zhàn)經(jīng)典第一戰(zhàn)—聽話的TextView
百戰(zhàn)經(jīng)典第十八戰(zhàn)-自定義控件實(shí)現(xiàn)一鍵清空輸入框
百戰(zhàn)經(jīng)典第十三戰(zhàn)-網(wǎng)絡(luò)交互,基于Baas實(shí)現(xiàn)用戶注冊功能

百戰(zhàn)經(jīng)典第八戰(zhàn)-BitmapFactory.Options對資源圖片進(jìn)行縮放

We all know,編寫的應(yīng)用程序都是有一定內(nèi)存限制的,程序占用了過高的內(nèi)存就容易出現(xiàn)OOM(OutOfMemory)異常。因此在展示高分辨率圖片的時(shí)候,最好先將圖片進(jìn)行壓縮,壓縮后的圖片大小應(yīng)該和用來展示它的控件大小相近,這樣可以協(xié)調(diào)顯示效果和內(nèi)存占用。

BitmapFactory.Options這個(gè)類,有一個(gè)字段叫做 inJustDecodeBounds 。SDK中對這個(gè)成員的說明是這樣的: If set to true, the decoder will return null (no bitmap), but the out… 也就是說,如果我們把它設(shè)為true,那么BitmapFactory.decodeFile(String path, Options opt)并不會(huì)真的返回一個(gè)Bitmap給你,它僅僅會(huì)把它的寬,高取回來給你,這樣就不會(huì)占用太多的內(nèi)存,也就不會(huì)那么頻繁的發(fā)生OOM了。

下面通過具體實(shí)例來展示怎么實(shí)現(xiàn)縮略圖。

1.布局文件:

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical" >  
    <ImageView  
        android:id="@+id/imageView1"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:src="@drawable/mei" />  
    <ImageView  
        android:id="@+id/imageView2"  
        android:layout_width="wrap_content"  
        android:layout_below="@+id/imageView1"  
        android:layout_height="wrap_content"  
        android:layout_marginTop="10dp"  
        android:src="@drawable/mei" />  
</RelativeLayout>  

2.MainActivity.java代碼如下:

package org.yayun.demo;  
//省略導(dǎo)入包   
public class MainActivity extends Activity {  
    private ImageView imageView1;  
    private ImageView imageView2;  
    Bitmap mBitmap;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        initView();  
    }  
    private void initView(){  
        imageView1=(ImageView)findViewById(R.id.imageView1);  
        imageView2=(ImageView)findViewById(R.id.imageView2);  
        //讀取資源圖片  
        mBitmap=readBitMap();  
        //對資源圖片進(jìn)行縮放  
        imageView2.setImageBitmap(zoomBitmap(mBitmap, mBitmap.getWidth()/4, mBitmap.getHeight()/4));  
    }  
    /** 
     * 讀取資源圖片 
     * @return  
     */  
    private Bitmap readBitMap(){  
        BitmapFactory.Options opt=new BitmapFactory.Options();  
        /* 
         * 設(shè)置讓解碼器以最佳方式解碼 
         */  
        opt.inPreferredConfig=Bitmap.Config.RGB_565;  
        //下面兩個(gè)字段需要組合使用  
        opt.inPurgeable=true;  
        opt.inInputShareable=true;  
        /* 
         * 獲取資源圖片 
         */  
        InputStream is=this.getResources().openRawResource(R.drawable.mei);  
        return BitmapFactory.decodeStream(is, null, opt);  
    }   
    /** 
     * 縮放圖片 
     * @param bitmap 
     * @param w 
     * @param h 
     * @return 
     */  
    public  Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {  
        int width = bitmap.getWidth();  
        int height = bitmap.getHeight();  
        Matrix matrix = new Matrix();  
        float scaleWidht = ((float) w / width);  
        float scaleHeight = ((float) h / height);  
        /* 
         * 通過Matrix類的postScale方法進(jìn)行縮放 
         */  
        matrix.postScale(scaleWidht, scaleHeight);  
        Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);  
        return newbmp;  
    }    
}  

定義了兩個(gè)ImageView,第一個(gè)ImageView不進(jìn)行任何操作,直接顯示圖片,第二個(gè)圖片進(jìn)行了壓縮顯示。上面代碼中主要包含了兩個(gè)方法,readBitMap和zoomBitmap方法。readBitMap先通過流的方式將資源文件讀入,然后調(diào)用了BitmapFactory的decodeStream方法將流轉(zhuǎn)換成Bitmap對象返回。zoomBitmap是實(shí)現(xiàn)圖片縮放的方法,需要三個(gè)參數(shù),bitmap,w 和h,bitmap就是前一個(gè)方法獲取的對象,w和h是壓縮比。這里將原圖片的寬高壓縮至原來的1/4。調(diào)用Matrix類的postScale方法進(jìn)行了圖片的壓縮,最后將壓縮后的bitmap對象返回,設(shè)置在imageview中,工作就結(jié)束了。

3.運(yùn)行實(shí)例:

這里寫圖片描述

一般開發(fā)中都會(huì)對圖片資源進(jìn)行壓縮,否則圖片較多的情況下,極有可能造成內(nèi)存不足的情況。