天天看點

安卓開發學習之016 ImageView(二)圖檔的N種擷取方法

一、ImageView設定圖檔的各種方法

1、setImageResource(int resId)

示例代碼:

2、setImageDrawable(Drawable drawable)

示例代碼:

3、setImageBitmap(Bitmap bm)

示例代碼:

4、setImageIcon(Icon icon)

示例代碼:

Android6.0(API23)以上才可以使用這個方法

5、setImageURI(Uri uri)

示例代碼:

二、擷取圖檔資源的N種方法

1、利用resource ID直接擷取

最簡單的方法
R.mipmap.ic_launcher
           

2、已知resource目錄下圖檔名稱,如何擷取圖檔

兩種方法:

1.利用getIdentifier(String name, String defType, String defPackage)擷取資源辨別ID

/**
     * 已知擷取圖檔名稱擷取圖檔的資源id的方法
     *
     * @param imageName
     * @return resourceID
     */
    public int getImageFromResourceByName(String imageName) {
        Context context = getBaseContext();
        int resId = getResources().getIdentifier(imageName, "mipmap", context.getPackageName());
        return resId;
    }
           

2.利用Java反射方法

/**
     * 利用反射方法
     * 已知圖檔名稱擷取圖檔的資源id的方法
     *
     * @param imageName
     * @return resourceID
     */
    public int getImageFromResourceByReflect(String imageName) {
        Class drawable = R.mipmap.class;
        Field field = null;
        int r_id;
        try {
            field = drawable.getField(imageName);
            r_id = field.getInt(field.getName());
        } catch (Exception e) {
            r_id = R.mipmap.ic_launcher;
            Log.e("ERROR", "PICTURE NOT FOUND!");
        }
        return r_id;
    }
           

3、從SD卡擷取圖檔

/**
     * 從SD卡擷取圖檔
     *
     * @param imageName
     * @return Bitmap
     */
    public Bitmap getImageFromSD(String imageName) {
        return BitmapFactory.decodeFile(sdPath);
    }
           

4、Assets目錄下擷取圖檔

兩種方法

1.利用AssetManager

/**
     * 從Assets目錄下卡擷取圖檔方法1
     *
     * @param imageName
     * @return Bitmap
     */
    public Bitmap getImageFromAssets(String imageName) {
        AssetManager am = getAssets();
        InputStream is = null;
        try {
            is = am.open("image/" + imageName);//得到圖檔流
        } catch (IOException e) {
            e.printStackTrace();
        }

        return BitmapFactory.decodeStream(is);
    }
           

2.利用getResourceAsStream()方法

/**
     * 從Assets目錄下卡擷取圖檔方法2
     *
     * @param imageName
     * @return Bitmap
     */
    public Bitmap getImageFromAssets2(String imageName) {
        InputStream is = getClass().getResourceAsStream("/assets/image/" + imageName);
        return BitmapFactory.decodeStream(is);
    }
           

5、擷取raw目錄下圖檔

/**
     * 從raw目錄下擷取圖檔方法
     *
     * @return Bitmap
     */
    public Bitmap getImageFromRaw() {
        InputStream is = getResources().openRawResource(R.raw.yxs);

        return BitmapFactory.decodeStream(is);
    }
           

6、擷取網絡圖檔

/**
     * 從網絡上擷取圖檔方法
     *
     * @return Bitmap
     */
    public Bitmap getImageFromInternet() {
        String url = "http://pic.baike.soso.com/p/20130128/bki-20130128144516-1340884592.jpg";
        InputStream is = null;
        try {
            is = new URL(url).openStream();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return BitmapFactory.decodeStream(is);
    }
           

調用

//        需要線上程中執行網絡操作
        new Thread() {
            @Override
            public void run() {
                final Bitmap bitmap = getImageFromInternet();
                imageView6.post(new Runnable() {
                    @Override
                    public void run() {
                        imageView6.setImageBitmap(bitmap);
                    }
                });
            }
        }.start();

    }
           

開發工具:Android Studio1.4

SDK: Android 6.0

API 23

代碼下載下傳:ShowImageView.zip