1. 程式人生 > >Android中多圖片選擇器ImagePicker庫的使用(仿微信、非常容易整合)

Android中多圖片選擇器ImagePicker庫的使用(仿微信、非常容易整合)

原文地址: https://github.com/jeasonlzy/ImagePicker

ImagePicker

Android自定義相簿,完全仿微信UI,實現了拍照、圖片選擇(單選/多選)、 裁剪 、旋轉、等功能。

由於個人時間有限,該專案停止維護

如果你發現有bug,或者好的建議,可以提merge request,我測試通過後會立即合併併發布新版本,確保該庫處於可用的狀態。

該專案參考了:

喜歡原作的可以去使用。同時歡迎大家下載體驗本專案,如果使用過程中遇到什麼問題,歡迎反饋。

聯絡方式

  • QQ群: 489873144 Android 格調小窩(點選圖示,可以直接加入,建議使用QQ群,郵箱使用較少,可能看的不及時)
  • 如果遇到問題歡迎在群裡提問,個人能力也有限,希望一起學習一起進步。

演示

imageimage imageimage

1.用法

使用前,對於Android Studio的使用者,可以選擇新增:

	compile 'com.lzy.widget:imagepicker:0.6.1'  //指定版本

2.功能和引數含義

溫馨提示:目前庫中的預覽介面有個原圖的複選框,暫時只做了UI,還沒有做壓縮的邏輯

配置引數引數含義
multiMode圖片選著模式,單選/多選
selectLimit多選限制數量,預設為9
showCamera選擇照片時是否顯示拍照按鈕
crop是否允許裁剪(單選有效)
style有裁剪時,裁剪框是矩形還是圓形
focusWidth矩形裁剪框寬度(圓形自動取寬高最小值)
focusHeight矩形裁剪框高度(圓形自動取寬高最小值)
outPutX裁剪後需要儲存的圖片寬度
outPutY裁剪後需要儲存的圖片高度
isSaveRectangle裁剪後的圖片是按矩形區域儲存還是裁剪框的形狀,例如圓形裁剪的時候,該引數給true,那麼儲存的圖片是矩形區域,如果該引數給fale,儲存的圖片是圓形區域
imageLoader需要使用的圖片載入器,自需要實現ImageLoader介面即可

3.程式碼參考

更多使用,請下載demo參看原始碼

  1. 首先你需要繼承 com.lzy.imagepicker.loader.ImageLoader 這個介面,實現其中的方法,比如以下程式碼是使用 Picasso 三方載入庫實現的
public class PicassoImageLoader
implements ImageLoader { @Override public void displayImage(Activity activity, String path, ImageView imageView, int width, int height) { Picasso.with(activity)//                    .load(Uri.fromFile(new File(path)))// .placeholder(R.mipmap.default_image)// .error(R.mipmap.default_image)// .resize(width, height)// .centerInside()// .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)// .into(imageView); } @Override public void clearMemoryCache() { //這裡是清除快取的方法,根據需要自己實現 } }
  1. 然後配置圖片選擇器,一般在Application初始化配置一次就可以,這裡就需要將上面的圖片載入器設定進來,其餘的配置根據需要設定
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image_picker);
    
    ImagePicker imagePicker = ImagePicker.getInstance();
    imagePicker.setImageLoader(new PicassoImageLoader());   //設定圖片載入器
    imagePicker.setShowCamera(true);  //顯示拍照按鈕
    imagePicker.setCrop(true);        //允許裁剪(單選才有效)
    imagePicker.setSaveRectangle(true); //是否按矩形區域儲存
    imagePicker.setSelectLimit(9);    //選中數量限制
    imagePicker.setStyle(CropImageView.Style.RECTANGLE);  //裁剪框的形狀
    imagePicker.setFocusWidth(800);   //裁剪框的寬度。單位畫素(圓形自動取寬高最小值)
    imagePicker.setFocusHeight(800);  //裁剪框的高度。單位畫素(圓形自動取寬高最小值)
    imagePicker.setOutPutX(1000);//儲存檔案的寬度。單位畫素
    imagePicker.setOutPutY(1000);//儲存檔案的高度。單位畫素
}
  1. 以上配置完成後,在適當的方法中開啟相簿,例如點選按鈕時
public void onClick(View v) {
        Intent intent = new Intent(this, ImageGridActivity.class);
        startActivityForResult(intent, IMAGE_PICKER);  
    }
}
  1. 如果你想直接呼叫相機
Intent intent = new Intent(this, ImageGridActivity.class);
intent.putExtra(ImageGridActivity.EXTRAS_TAKE_PICKERS,true); // 是否是直接開啟相機
      startActivityForResult(intent, REQUEST_CODE_SELECT);
  1. 重寫onActivityResult方法,回撥結果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
        if (data != null && requestCode == IMAGE_PICKER) {
            ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
            MyAdapter adapter = new MyAdapter(images);
            gridView.setAdapter(adapter);
        } else {
            Toast.makeText(this, "沒有資料", Toast.LENGTH_SHORT).show();
        }
    }
}

更新日誌

V 0.6.1

V 0.6.0

V 0.5.5

  • [修復]選擇圖頁面進入預覽取消選擇或者選擇後返回列表不更新的問題;
  • [修復]6.0動態許可權可能導致崩潰的bug;

V 0.5.4

  • [修復]部分記憶體洩漏問題;
  • [修復]新增顯示已選中圖片的呼叫方法:詳情請檢視demo首頁的ImagePickerActivity;如果不需要此功能,則WxDemoActivity可能是你想要的。

V 0.5.3

  • [修復]矯正圖片旋轉導致的oom;
  • [修復]部分手機TitleBar和狀態列重複的問題;

V 0.5.1

  • [更正] 由於原圖功能其實還沒有做,所以本版本隱去了原圖的顯示。以免使用者誤解原圖問題。
  • [修復] 使用RecyclerView替換GridView解決改變選中狀態全域性重新整理的問題;
  • [提示] 雖然本次解決了全域性重新整理,但是如果使用的是Picasso依然會出現重新載入一張圖片的問題,這是Picasso自己的問題,建議使用Glide框架。

V 0.5.0

  • [修復] 解決provider衝突問題;

V 0.4.8

  • [修復] 解決demo中直接呼起相機並裁剪不會返回資料的bug,不需要這個功能的可以不更新;

V 0.4.7

  • [新增] 新增可直接調起相機的功能;
  • [修復] 解決可能和主專案provider衝突的潛在問題;
  • [修復] 點選圖片預覽空指標崩潰問題;
  • [修復] 使用Intent傳值限制導致的崩潰問題;
  • [修復] 部分機型拍照後圖片旋轉問題;
  • [修復] 更改選擇框圖片背景為灰色,以免白色圖看不清。

V 0.3.5

  • [新增] 提供直接調起相機的方式,並可直接設定牌照是否裁剪;
  • [修復] Android7.0裝置調系統相機直接崩潰的問題;
  • [注意] 如果出現 java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported,請直接clean再執行即可。

更多使用,請下載demo參看原始碼


相關推薦

Android圖片選擇ImagePicker的使用仿非常容易整合

原文地址: https://github.com/jeasonlzy/ImagePickerImagePickerAndroid自定義相簿,完全仿微信UI,實現了拍照、圖片選擇(單選/多選)、 裁剪 、旋轉、等功能。由於個人時間有限,該專案停止維護如果你發現有bug,或者好的

Android圖片選擇PhotoPicker的使用仿,秒殺MultiImageSelector

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); i

Android 關於圖片選擇Android-Ultra-Photo-Selector的使用(附原始碼)

最近在網上看各種開源框架的使用,而且近期自己開發的工程需要使用到多圖片選擇,於是使用了Android-Ultra-Photo-Selector這款框架(ps:這個工程是一個外部lib包,所以需要將你自己的工程引用),感興趣的可以直接去下載或者下載我的資源(文章最好會有原始碼

android6個EditText輸入驗證碼仿支付寶支付輸入密碼框

/**  *  * @author lm  *  */ public class IdentifyActivity extends Activity {     private EditText mEditTextOne, mEditTextTwo, mEditTextThree, mEditTextFou

Android二維碼仿,輕量Zxing

前言 要做一個功能,二維碼識別。網上找一堆相關的Demo,但是總不是想要的效果,或者都是多年前的版本,權衡考慮之後,決定親自操刀。不糾結直接選中Zxing框架,https://github.com/zxing/zxing 在網站上直接clone下來,執行,然後

同一個app不同activity顯示仿小程式切換效果

簡書地址:https://www.jianshu.com/p/a8f695841008 轉載請註明出處 如題,這種效果類似微信小程式顯示的效果,就是開啟微信跳一跳後,切換安卓多工視窗(就是清理記憶體視窗),會看到如下頁面 微信小程式會在其中顯示兩個單獨

Android實現二維碼掃描仿,輕量Zxing

前言 要做一個功能,二維碼識別。網上找一堆相關的Demo,但是總不是想要的效果,或者都是多年前的版本,權衡考慮之後,決定親自操刀。不糾結直接選中Zxing框架,https://github.com/zxing/zxing 在網站上直接clone下來,執行,然後就發現問題了.

CSS選擇之間有無空格的區別

#content.div {color:#f00;} #content .div {color:#f00;}第一行:表示ID是content並且同時類名是div的選擇器,此時才能生效第二行:表示ID是content下子節點元素中含有類名為div的選擇器,此時才能生效

androidRadioButton的選擇

今天碰到一個RadioGroup和RadioButton的選擇器問題。具體情境如下: 兩個RadioButton來回選擇,背景和文字相應跟著變換。選擇RadioButton1時候,1的背景變成白色,文字變成紅色;2的背景變成紅色,文字變成白色。選擇RadioButton2時

iOS新增圖片選擇的實現

//為imageview新增點選事件的方法,搜尋tap gesture 為圖片新增,並在右側選擇interfaceenable,後為左側的tap gesture拖入事件 //下方法為點選圖片後從相簿插

jq條件選擇,相對選擇,層次選擇的區別

一、Jquery常用的過濾選擇器如下所示:     1、:first,選取第一個元素,比如$("div:first")選取第一個div元素     2、:last,選取最後一個元素,比如$("div:last")選取最後一個div元素     3、:not(選擇器)

Android 平板 自定義鍵盤(popuwindow) 居於螢幕左下方 仿的密碼輸入介面

      之前部落格中,介紹過使用谷歌提供的鍵盤的一些api,可以很好地自定義鍵盤,參考我之前的部落格連結:android 自定義鍵盤 ,這個有一個侷限性,只能佔滿螢幕,無法做到只能佔一部分的需求鍵盤,如下圖我平板中的鍵盤需求:(由於公司保密需要,所以比較恐怖一點,嘿嘿)

Android 修改源碼自定義SwipeRefreshLayout樣式——高仿朋友圈下拉刷新

樣式 post and 微信 修改 size roi 自定義 details 修改源碼自定義SwipeRefreshLayout樣式——高仿微信朋友圈下拉刷新Android 修改源碼自定義SwipeRefreshLayout樣式——高仿微信朋友圈下拉

android仿QQ等聊天介面,實現點選輸入框彈出軟鍵盤點選其他區域收起軟鍵盤,預設滑動至最低端

如圖所示,點選輸入框及選擇圖片和傳送按鈕時軟鍵盤顯示且不消失,點選其他區域,則隱藏軟鍵盤。 主要程式碼如下: override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { if (ev!!.getAction() ==

Android Zxing實現掃描二維碼條形碼功能仿整合閃光燈生成二維碼

最近在做android專案需要用到二維碼條形碼掃描功能,我用的是Eclipse網上原始碼大多是GitHup上的Android studio版本的所以我改了一版整合到專案中去。 效果圖: 左邊版本的掃碼框是自定義的。右邊版本的掃碼框和掃描線是圖片因為太醜所以最終換成左邊

Android 使用RecyclerView實現仿的聯絡人A-Z字母排序和過濾搜尋功能

之前做專案的時候遇到一個需求是實現品牌的字母排序功能,網上的資料很多,但是有一部分有bug,這篇文章是我學習和解決部分bug之後的總結。今天帶來的是RecyclerView的A-Z字母排序和過濾搜尋功能。 首先上效果圖: 重點:1、實現資料排序分類 2、

Android 實現自定義安全數字鍵盤仿

背景 大部分的金融App會對預設的數字鍵盤進行處理,以實現自定義的數字安全鍵盤。基於此,本文對對微信數字鍵盤樣式進行了仿寫,實現了一套自定義的數字安全鍵盤(支援隨機數字分佈)。 一.圖示效果 二.需要考慮的問題 佈局的實現方式; demo中使用了popupw

推薦手機H5應用快速開發 UIFramework7SUI(淘寶)MUIWeUI()GMU(百度Frozen UIQQ

推薦手機H5應用快速開發 UI庫 Framework7(阿里巴巴)、SUI(淘寶)、MUI( dcloud-HBuilder)、WeUI(微信)、Frozen UI(騰訊手機QQ)、GMU(百度)、Amaze UI(雲適配) 等… Framework

android 仿支付寶支付密碼框效果

  GitHub:https://github.com/Jungerr/GridPasswordView 新增依賴: compile 'com.jungly:gridPasswordView:

Android仿錄製音訊併發送功能

1.首先是主頁面的佈局     佈局採用線性佈局,上面使用的一個ListView,下面使用的是一個自定義的Button(會在下面進行介紹) <LinearLayout xmlns:android="http://schemas.android.com/apk/re