1. 程式人生 > >Android大神級PictureSelector微信圖片選擇器

Android大神級PictureSelector微信圖片選擇器

前言

由於自己水平不夠,只能找這種框架,幸運的是我找到了。而且很好用
我體會到的優點:
1.不用管7.0許可權問題,框架給你幹好了
2.不用管6.0許可權問題,框架也搞好了
3.靈活性極強,可壓縮、裁剪、多選、單選…………
4.呼叫方便,預覽方便,
實為佩服這位大神,附上github連結

準備工作

第一步、導包、新增許可權

    compile 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3'
allprojects {
    repositories {
        jcenter()
        maven { url 'https://jitpack.io'
}
maven { url 'https://maven.google.com' } } }

AndroidManifest.xml新增許可權

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

第二步、使用
賊簡單,這裡說一下我用到的包含拍照、相簿的
直接Activity程式碼:

        findViewById(R.id.select
).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { photoAndCamera(); } });
//    啟動相簿、拍照:
    public void photoAndCamera(){
        PictureSelector.create(MainActivity.this)
                .openGallery(PictureMimeType.ofImage())
                .forResult(PictureConfig.CHOOSE_REQUEST);
    }

我想知道還有sei,這麼方便。就到了相簿展示頁面。

選擇了圖片咱得回來展示吧:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case PictureConfig.CHOOSE_REQUEST:
                    // 圖片選擇結果回撥
                    selectList = PictureSelector.obtainMultipleResult(data);
                    // 例如 LocalMedia 裡面返回三種 path
                    // 1.media.getPath(); 為原圖 path
                    // 2.media.getCutPath();為裁剪後 path,需判斷 media.isCut();是否為 true
                    // 3.media.getCompressPath();為壓縮後 path,需判斷 media.isCompressed();是否為 true
                    // 如果裁剪並壓縮了,以取壓縮路徑為準,因為是先裁剪後壓縮的
                    for(int i=0;i<selectList.size();i++){

                        imagePaths.add(selectList.get(i).getPath());
                    }
                    gridAdapter.notifyDataSetChanged();
                    break;
            }
        }
    }

就是這麼簡單啦!!!
gridview展示圖片和介面卡就自己寫吧,相信難不倒大家。
中間出現了兩個小問題

1

.gridview展示預覽,很簡單的,在其點選事件裡面寫

    PictureSelector.create(MainActivity.this).externalPicturePreview(i, "/custom_file",selectList );
    PictureSelector.create(MainActivity.this).externalPicturePreview(i, selectList);

2

在gridview介面卡中,需要圖片的顯示,此框架集成了最新的Glide框架,所以我們使用的時候不需要再次集成了。但是這裡有個新的問題就是原來的那種Glide.placeholder()這種方式不能行了,簡單搞定:

      RequestOptions options = new RequestOptions();
      options.placeholder(R.mipmap.ic_launcher)
                    .centerCrop();
      Glide.with(MainActivity.this)
                    .load(path)
                    .apply(options)
                    .into(holder.image);

最後

雖然我沒有感覺到混淆設定的作用,但是還是建議加上,

#PictureSelector 2.0
-keep class com.luck.picture.lib.** { *; }

-dontwarn com.yalantis.ucrop**
-keep class com.yalantis.ucrop** { *; }
-keep interface com.yalantis.ucrop** { *; }

 #rxjava
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
 long producerIndex;
 long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
 rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
 rx.internal.util.atomic.LinkedQueueNode consumerNode;
}

#rxandroid
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
   long producerIndex;
   long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode consumerNode;
}

#glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}

# for DexGuard only
-keepresourcexmlelements manifest/application/[email protected]=GlideModule

再附上常用方法:

// 進入相簿 以下是例子:用不到的 api 可以不寫
 PictureSelector.create(MainActivity.this)
     .openGallery()//全部.PictureMimeType.ofAll()、圖片.ofImage()、視訊.ofVideo()
     .theme()//主題樣式(不設定為預設樣式) 也可參考 demo values/styles 下 例如:R.style.picture.white.style
     .maxSelectNum()// 最大圖片選擇數量 int
     .minSelectNum()// 最小選擇數量 int
    .imageSpanCount(4)// 每行顯示個數 int
     .selectionMode()// 多選 or 單選 PictureConfig.MULTIPLE or PictureConfig.SINGLE
     .previewImage()// 是否可預覽圖片 true or false
     .previewVideo()// 是否可預覽視訊 true or false
    .enablePreviewAudio() // 是否可播放音訊 true or false
     .compressGrade()// luban 壓縮檔次,預設 3 檔 Luban.THIRD_GEAR、Luban.FIRST_GEAR、Luban.CUSTOM_GEAR
     .isCamera()// 是否顯示拍照按鈕 true or false
    .isZoomAnim(true)// 圖片列表點選 縮放效果 預設 true
    .sizeMultiplier(0.5f)// glide 載入圖片大小 0~1 之間 如設定 .glideOverride()無效
    .setOutputCameraPath("/CustomPath")// 自定義拍照儲存路徑,可不填
     .enableCrop()// 是否裁剪 true or false
     .compress()// 是否壓縮 true or false
     .compressMode()//系統自帶 or 魯班壓縮 PictureConfig.SYSTEM_COMPRESS_MODE or LUBAN_COMPRESS_MODE
     .glideOverride()// int glide 載入寬高,越小圖片列表越流暢,但會影響列表圖片瀏覽的清晰度
     .withAspectRatio()// int 裁剪比例 如 16:9 3:2 3:4 1:1 可自定義
     .hideBottomControls()// 是否顯示 uCrop 工具欄,預設不顯示 true or false
     .isGif()// 是否顯示 gif 圖片 true or false
     .freeStyleCropEnabled()// 裁剪框是否可拖拽 true or false
     .circleDimmedLayer()// 是否圓形裁剪 true or false
     .showCropFrame()// 是否顯示裁剪矩形邊框 圓形裁剪時建議設為 false   true or false
     .showCropGrid()// 是否顯示裁剪矩形網格 圓形裁剪時建議設為 false    true or false
     .openClickSound()// 是否開啟點選聲音 true or false
     .selectionMedia()// 是否傳入已選圖片 List<LocalMedia> list
     .previewEggs()// 預覽圖片時 是否增強左右滑動圖片體驗(圖片滑動一半即可看到上一張是否選中) true or false
     .cropCompressQuality()// 裁剪壓縮質量 預設 90 int
     .compressMaxKB()//壓縮最大值 kb compressGrade()為 Luban.CUSTOM_GEAR 有效 int 
     .compressWH() // 壓縮寬高比 compressGrade()為 Luban.CUSTOM_GEAR 有效  int 
     .cropWH()// 裁剪寬高比,設定如果大於圖片本身寬高則無效 int 
     .rotateEnabled() // 裁剪是否可旋轉圖片 true or false
     .scaleEnabled()// 裁剪是否可放大縮小圖片 true or false
     .videoQuality()// 視訊錄製質量 0 or 1 int
     .videoSecond()// 顯示多少秒以內的視訊 or 音訊也可適用 int 
    .recordVideoSecond()//視訊秒數錄製 預設 60s int
     .forResult(PictureConfig.CHOOSE_REQUEST);//結果回撥 onActivityResult code

這樣就穩滴很,整個也就這樣了,再次感謝框架大神,我只是程式碼搬運工。
本人不提倡重複造輪子,但是有時間一定要試著去研究別人怎麼造的。

相關推薦

AndroidPictureSelector圖片選擇

前言 由於自己水平不夠,只能找這種框架,幸運的是我找到了。而且很好用 我體會到的優點: 1.不用管7.0許可權問題,框架給你幹好了 2.不用管6.0許可權問題,框架也搞好了 3.靈活性極強,可壓縮、裁剪、多選、單選………… 4.呼叫方便,預覽方便,

Android 超高仿圖片選擇 圖片該這麽載入

主界面 asto 布局 sage comm equal ear 博文 細致 轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:【張鴻洋的博客】1、概述關於手機圖片載入器,在當今

Android 超高仿圖片選擇 圖片該這麼載入

                轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:【張鴻洋的部落格】1、概述關於手機圖片載入器,在當今畫素隨隨便便破千萬的時代,一張圖片佔據的記憶體都相當可觀,作為高大尚程式猿的我們,

Android 超高仿圖片選擇 圖片該這麼載入

轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:【張鴻洋的部落格】1、概述關於手機圖片載入器,在當今畫素隨隨便便破千萬的時代,一張圖片佔據的記憶體都相當可觀,作為高大尚程式猿的我們

android圖片選擇

程式碼專案github地址 IMAlbum 封裝原則:基礎單一原則、簡單、無業務耦合 一.產品業務場景 1.傳送訊息==>選擇圖片==>本地圖片預覽+” 勾選、取消選擇”按鈕、”傳送”按鈕 2.聊天介面的圖片==>點選圖片訊息型別

android之使用GridView+仿圖片上傳功能(附源代碼)

相冊 ada nbu [] for round pen fromfile idt   由於工作要求最近在使用GridView完成圖片的批量上傳功能,我的例子當中包含仿微信圖片上傳、拍照、本地選擇、相片裁剪等功能,如果有需要的朋友可以看一下,希望我的實際經驗能對您有所幫助。

Android開發技巧——定製仿圖片裁剪控制元件

拍照——裁剪,或者是選擇圖片——裁剪,是我們設定頭像或上傳圖片時經常需要的一組操作。上篇講了Camera的使用,這篇講一下我對圖片裁剪的實現。 背景 下面的需求都來自產品。 裁剪圖片要像微信那樣,拖動和放大的是圖片,裁剪框不動。 裁剪框外的內容要有半透

Android使用Retrofit技術仿圖片上傳,可以選擇多張圖片拍照上傳

Android 仿照微信發說說,既能實現拍照,選相簿,多圖案上傳 使用Retrofit技術。 使用方法:詳見部落格 專案的執行效果: 伺服器端接收檔案的action UploadFile.java @Controller p

android圖片瀏覽框架設計

程式碼專案github地址 IMAlbum 一、業務場景 1、聊天介面傳送圖片==>多選點選+有右上角”傳送”+圖片預覽==>圖片預覽支援右上角”傳送”邏輯 2、發表動態==>多選點選+右上角”完成” + 圖片預覽==>圖片預覽

Android圖片選擇,仿圖片選擇的樣式和效果。支援圖片預覽和圖片切換

Android圖片選擇器,仿微信的圖片選擇器的樣式和效果。支援圖片的單選、限數量的多選和不限數量的多選。支援圖片預覽和圖片資料夾的切換。支援圖片單選並剪裁。先上效果圖:1、引入依賴在Project的build.gradle在新增以下程式碼allprojects { repositories {

android高仿圖片瀏覽器

專案中用到圖片瀏覽 拆分出來 以後方便使用 高仿微信圖片瀏覽器 module使用 rxjava + okhttp3 + fresco 所以專案中引用以後 會增大安裝包體積2m左右 如果你的專案中沒有使用rxjava 和 okhttp3 和fresco

Android仿圖片編輯庫,你想要的功能這裡都有

最近專案需要,寫了一個和微信中圖片編輯功能類似的圖片編輯庫,除去問題操作上擯棄掉不方便的手勢操作外,其餘微信中的核心功能全部一致,保留了微信中塗鴉、馬賽克、文字等隨時隨著圖片縮放的功能,這點是我所找的庫都不提供的功能,也是我從零去完成這個圖片編輯庫的原因。

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

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

Android 多張圖片展示,仿圖片上傳,可以選擇多張圖片

我們經常會遇到需要多張圖片展示上傳的需求 ,如圖 這樣的需求我已經遇到過多次,個人總結一下,希望大家多多指點,支援選擇多張圖片 佈局:一個GridView <com.zuihou.drunkenmonkey.widget.view.Di

Android筆記之(圖片高斯+Glide實現圖片載入策略+仿進度條)

很久以前就想自己實現一下仿微信圖片載入的那種策略了,先載入一張模糊的圖片,然後再載入清晰大圖,今天研究了一下,不過要是Glide支援進度條顯示就好了,不得不說Glide很強大, 不囉嗦了,直接上程式碼了。 首先看看高斯模糊到底怎麼實現,你問我我也不會(^__

android圖片選擇控制元件(仿圖片多選[附原始碼])

一、背景:     最近公司有一個專案需要支援手機本地圖片的多選,就像微信那樣的。    OK,不能呼叫系統的圖片選擇控制元件,那就自己寫個吧,基本思路就是使用ContentProvider掃描手機中的圖片,然後以Gridview的方式展示圖片,同時為了保證能圖片能快速載

Android 仿圖片選擇ImageSelector的使用

今天給大家介紹一個仿微信的圖片選擇器:ImageSelector。ImageSelector支援圖片的單選、限數量的多選和不限數量的多選。支援圖片預覽和圖片資料夾的切換。在上一篇文章 《Android 實現一個仿微信的圖片選擇器》 中我介紹了ImageSelec

Android中多圖片選擇PhotoPicker庫的使用(仿,秒殺MultiImageSelector)

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

Android 超高仿圖片多選、單選,圖片剪下,圖片預覽,拍照等功能

實現了微信圖片選擇的所有功能 單選、多選 單選,沒有預覽功能。 多選,可以控制最大 選擇圖片數量 拍照 解決了三星拍照橫屏的bug 關閉拍照後,第一個item將不顯示拍照選項 預覽 開啟預覽功能後,點選圖片或右下角預覽進入預覽介面。 關

圖片分享遇到 checkArgs fail, thumbData is invalid

!= 得到 mat stat 轉換成 new ack turn arr 該問題主要是微信圖片限制32K以內的原因,可將bmpToByteArray方法進行進行改寫。 原方法是: /** * 得到Bitmap的byte * @autho