1. 程式人生 > >Android-從相簿中選擇圖片顯示出來

Android-從相簿中選擇圖片顯示出來

一、選擇圖片

定義Intent跳轉到特定相簿的Uri下挑選,然後將挑選結果返回給Activity

用到startActivityForResult

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RESULT);
然後在onActivityForResult儲存

二、圖片縮放

這裡講的很詳細

照它所說有3種方法:

第一種是BitmapFactory和BitmapFactory.Options,同比例縮放,但是效率高


第二種是使用Bitmap加Matrix來縮放,能夠不同比例,但是效率低

第三種是用2.2新加的類ThumbnailUtils來做,這方法不懂,好複雜。。

我用第一種,將圖片放在Imageview中

  private void showPhoto(ImageView photo){
        String picturePath = target.getInfo(Target.TargetPhotoPath);// 圖片的uri
        if(picturePath.equals(""))
            return;
        // 縮放圖片, width, height 按相同比例縮放圖片
        BitmapFactory.Options options = new BitmapFactory.Options();
        // options 設為true時,構造出的bitmap沒有圖片,只有一些長寬等配置資訊,但比較快,設為false時,才有圖片
        options.inJustDecodeBounds = true;
        Bitmap bitmap = BitmapFactory.decodeFile(picturePath, options);
        int scale = (int)( options.outWidth / (float)300);
        if(scale <= 0)
            scale = 1;
        options.inSampleSize = scale;
        options.inJustDecodeBounds = false;
        bitmap = BitmapFactory.decodeFile(picturePath, options);

        photo.setImageBitmap(bitmap);
        photo.setMaxHeight(350);
    }
    

三、程式碼

public class RemindActivity extends Activity {

    private ImageView photo;
    private static final int RESULT = 1;
    Target target;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_remind);

        photo = (ImageView)findViewById(R.id.photo);
        target = new Target(this);

        showPhoto(photo);

        photo.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Dialog dialog = new AlertDialog.Builder(RemindActivity.this)
                .setTitle("從相簿裡選擇照片").setMessage("確定要更換照片?").setPositiveButton("確定", 
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub
                                Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                                startActivityForResult(intent, RESULT);
                            }
                        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub
                                dialog.cancel();
                            }
                        }).create();
                dialog.show();
            }

        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == RESULT && resultCode == RESULT_OK && data != null){

            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();

            target.setInfo(Target.TargetPhotoPath, picturePath);

            showPhoto(photo);
        }
    }

    private void showPhoto(ImageView photo){
        String picturePath = target.getInfo(Target.TargetPhotoPath);
        if(picturePath.equals(""))
            return;
        // 縮放圖片, width, height 按相同比例縮放圖片
        BitmapFactory.Options options = new BitmapFactory.Options();
        // options 設為true時,構造出的bitmap沒有圖片,只有一些長寬等配置資訊,但比較快,設為false時,才有圖片
        options.inJustDecodeBounds = true;
        Bitmap bitmap = BitmapFactory.decodeFile(picturePath, options);
        int scale = (int)( options.outWidth / (float)300);
        if(scale <= 0)
            scale = 1;
        options.inSampleSize = scale;
        options.inJustDecodeBounds = false;
        bitmap = BitmapFactory.decodeFile(picturePath, options);

        photo.setImageBitmap(bitmap);
        photo.setMaxHeight(350);
    }
}


相關推薦

Android-相簿選擇圖片顯示出來

一、選擇圖片 定義Intent跳轉到特定相簿的Uri下挑選,然後將挑選結果返回給Activity 用到startActivityForResult Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Imag

Android相簿選擇圖片顯示出來

下面的兩篇部落格我是選擇其中的一部分使用的。大家可以自己試試。 第一篇:http://blog.csdn.net/jackyguo1992/article/details/26729107 一、選擇圖片 定義Intent跳轉到特定相簿的Uri下挑選,然後將挑選結果返

Android相簿選擇圖片並作為Activity的背景(主題)

實現邏輯: 首先獲取本地相簿圖片的絕對路徑URL,儲存; 通過圖片的絕對路徑轉成bitmap; 設背景,結束。 許可權: <uses-permission android:

android---相簿選擇圖片

private ImageView picture; public static final int CHOOSE_PHOTO=2; picture=(ImageView)findViewById(R.id.imageView); run_Permissions();

Android呼叫攝像頭拍照儲存,並在相簿選擇圖片顯示

我的配置是: android手機版本是7.0 android studio是3.1 android平臺是9.0 我的測試都是在真機上進行的。 首先來看程式碼: package com.example.sunshunli.cameraalbumtest; import a

ionic呼叫照相機或者相簿選擇圖片進行上傳

開發App的時候會經常用到拍照上傳留作憑證,或者從相簿中選擇。 相關外掛: 相機:cordova-plugin-camera 2.4.1 相簿:cordova-plugin-image-picker 1.1.1 檔案:cordova-plugin-file 許可權:cordova-plugi

Android相簿選取圖片上傳到阿里雲OSS

    在開發APP軟體中,boss突然提出想在軟體中新增一個多張照片上傳的功能,作為菜鳥的我,琢磨了兩天,才弄出來,今天特地貼出來。本篇部落格主要介紹的是將本地圖片上傳到伺服器的方法技巧。主要技術點是: 一、運用第三方可以從相簿中選取多張圖片。 二、將圖片

拍照上傳圖片相簿選擇圖片上傳

手機拍照與上傳圖片是APP中很常用的功能。 我們先寫個佈局,然後程式碼實現。 MediaStore.ACTION_IMAGE_CAPTURE); //呼叫相機 intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,

呼叫攝像頭和相簿(呼叫攝像頭拍照和相簿選擇圖片

public class MainActivity extends Activity { public static final int TAKE_PHOTO=1; public static final int CROP_PHOTO=0; public static

android 呼叫相簿選擇圖片

package cn.xzmd.diaoyong.photo; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.graphics.BitmapF

呼叫Android系統自帶相機拍照,相簿獲取圖片(相容7.0系統)

一,前言: 在日常的手機應用開發過程中,經常會遇到上傳圖片的需求,像上傳頭像之類的,這就需要呼叫系統的相機,相簿獲取照片。但是在Android 系統7.0之後認為這種操作是不安全的,這篇文章主要就是記錄7.0獲取照片遇到的問題。 二,FileProvider介紹 都

Android呼叫系統相機拍照,相簿選擇照片,呼叫系統攝像機錄影

最近在Android Studio上折騰程式碼,昨天編譯器又很不給面子的報錯了: Error type 3 Error: Activity class {com.example.myapplication/com.example.myapplication

ionic拍照上傳圖片檔案選擇圖片

本文主要使用cordova實現拍照上傳,拍照上傳或從資料夾中選擇上傳圖片 流程:拍照或選擇圖片===>獲取本機路徑==>向伺服器上傳圖片,獲取伺服器上圖片路徑 一、環境準備   安裝 cordova-plugin-camera 外掛     &n

android通訊錄選擇聯絡人並讀取號碼

1.Manifest檔案中新增許可權配置: <uses-permission android:name="android.permission.WRITE_CONTACTS"/> <uses-permission android:name

Android-->拍照/相簿選擇照片(Uri獲取圖片路徑)

對於一個APP來說, 照片選擇是經常會用到的功能. 拍照獲取照片 此方法需要指定照片的路徑, 這是最簡單的獲取照片的方式了; /** * 拍照獲取圖片, imageUri.getPath() 圖片路徑 */ public static void g

android相簿選擇圖片和拍照選擇圖片

在android開發中選擇圖片的方式大致可以分類兩種,一種是從手機相簿獲取,另外一種則是通過呼叫手機拍照獲得 手機相簿中獲取,這種方式需要讀取儲存卡的許可權 <uses-permission android:name="android.permission.REA

[Android] WebView拍照或相簿上傳圖片

  WebView 上傳圖片, 想必很多人都碰到過這樣的場景. 而且 WebView 在4.4前後的區別非常大, 比如對URL跳轉的格式, 對JS的注入宣告等等, 4.4以後的WebView 已經是chromium核心, 有多強大就無需我贅述. 說這些, 其實也

呼叫系統相機拍照獲取圖片或者相簿呼叫本地圖片顯示問題

            需求是這樣的:開啟系統或者第三方相機app拍照,然後使用所拍照片進行處理,或者直接呼叫系統或者第三方相簿app,選擇圖片返回使用。需求很簡單,過程很蛋疼,網上有很多方法,不過有很多不好用的地方,最後使用的這種方式還不錯,記錄一下,還是那句話,我很懶,

android 如何系統相簿獲取圖片

http://bbs.csdn.net/topics/390133207 需要在專案中加入一個從系統相簿中選取圖片的功能,選擇的圖片bitmap顯示出來即可,不需要圖片剪下功能網上的例子很多,我用的以下程式碼實現的Intent intent=new Intent(Inten

Android 如何系統圖庫選擇圖片

這幾天我都在做Android的App,同時學習它的API,我將分享一些我學到的東西,比如: 如何從系統圖庫中選擇圖片。 首先,讓我們來看看如何將手機系統圖庫整合到你的App中,然後再從相簿中選擇圖片來做一些事。例如,在Facebook的App,你就可以直接選擇手機上的圖片上