android多圖選擇
PictureSelector
最近專案中用到多圖選擇上傳的需求,考慮到android機型眾多問題就自己花時間寫了一個,測試了大概60款機型,出現過一些問題也都一一修復了,基本上穩定了特分享出來,介面UI也是商用級的開發者不用在做太多修改了,介面高度自定義,可以設定符合你專案主色調的風格,整合完成後就可以拿來用。
專案會一直維護,有bug請描述清楚,並請Issues會第一時間修復,Android開發QQ交流群 619458861,個人QQ [email protected] 希望用得著的朋友點個start。
功能特點:
1.適配android6.0+系統 2.解決部分機型裁剪閃退問題 3.解決圖片過大oom閃退問題 4.動態獲取系統許可權,避免閃退 5.支援相片or視訊的單選和多選 6.支援裁剪比例設定,如常用的 1:1、3:4、3:2、16:9 預設為圖片大小 7.支援視訊預覽 8.支援gif圖片 9.支援.webp格式圖片 10.支援一些常用場景設定:如:是否裁剪、是否預覽圖片、是否顯示相機等 11.新增自定義主題設定 12.新增圖片勾選樣式設定 13.新增圖片裁剪寬高設定 14.新增圖片壓縮處理 15.新增錄視訊最大時間設定 16.新增視訊清晰度設定 17.新增QQ選擇風格,帶數字效果 18.新增自定義 文字顏色 背景色讓風格和專案更搭配 19.新增多圖裁剪功能 20.新增LuBan多圖壓縮 21.新增單獨拍照功能 22.新增壓縮大小設定 23.新增Luban壓縮檔次設定 24.新增圓形頭像裁剪
那些遇到拍照閃退問題的同學,請記得看清下面適配6.0的配置~
重要的事情說三遍記得新增許可權
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
注:適配android6.0以上拍照問題,請在AndroidManifest.xml中新增標籤
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
整合步驟
方式一 compile引入
dependencies {
compile 'com.github.LuckSiege.PictureSelector:picture_library:v1.5.5'
}
專案根目錄build.gradle加入
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
}
方式二 maven引入
step 1.
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
step 2.
<dependency>
<groupId>com.github.LuckSiege.PictureSelector</groupId>
<artifactId>picture_library</artifactId>
<version>v1.5.5</version>
</dependency>
常見錯誤*
問題一:
rxjava衝突:在app build.gradle下新增
packagingOptions {
exclude 'META-INF/rxjava.properties'
}
問題二:
java.lang.NullPointerException:
Attempt to invoke virtual method 'android.content.res.XmlResourceParser
android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)'
on a null object reference
application下新增如下節點:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
注意:如已新增其他sdk或專案中已使用過provider節點,
[請參考我的部落格](http://blog.csdn.net/luck_mw/article/details/54970105)的解決方案
問題三:
PhotoView 庫衝突,可以刪除自己專案中引用的,Picture_library中已經引用過,或引用com.commit451:PhotoView:1.2.4版本
相簿啟動構造方法
FunctionOptions options = new FunctionOptions.Builder()
.setType() // 圖片or視訊 FunctionConfig.TYPE_IMAGE TYPE_VIDEO
.setCropMode() // 裁剪模式 預設、1:1、3:4、3:2、16:9
.setCompress() //是否壓縮
.setEnablePixelCompress() //是否啟用畫素壓縮
.setEnableQualityCompress() //是否啟質量壓縮
.setMaxSelectNum() // 可選擇圖片的數量
.setMinSelectNum()// 圖片或視訊最低選擇數量,預設代表無限制
.setSelectMode() // 單選 or 多選 FunctionConfig.MODE_SINGLE FunctionConfig.MODE_MULTIPLE
.setVideoS(0)// 查詢多少秒內的視訊 單位:秒
.setShowCamera() //是否顯示拍照選項 這裡自動根據type 啟動拍照或錄視訊
.setEnablePreview() // 是否開啟預覽選項
.setEnableCrop() // 是否開啟剪下選項
.setCircularCut()// 是否採用圓形裁剪
.setPreviewVideo() // 是否預覽視訊(播放) mode or 多選有效
.setCheckedBoxDrawable() // 選擇圖片樣式
.setRecordVideoDefinition() // 視訊清晰度
.setRecordVideoSecond() // 視訊秒數
.setCustomQQ_theme()// 可自定義QQ數字風格,不傳就預設是藍色風格
.setGif()// 是否顯示gif圖片,預設不顯示
.setCropW() // cropW-->裁剪寬度 值不能小於100 如果值大於圖片原始寬高 將返回原圖大小
.setCropH() // cropH-->裁剪高度 值不能小於100 如果值大於圖片原始寬高 將返回原圖大小
.setMaxB() // 壓縮最大值 例如:200kb 就設定202400,202400 / 1024 = 200kb左右
.setPreviewColor() //預覽字型顏色
.setCompleteColor() //已完成字型顏色
.setPreviewTopBgColor()//預覽圖片標題背景色
.setPreviewBottomBgColor() //預覽底部背景色
.setBottomBgColor() //圖片列表底部背景色
.setGrade() // 壓縮檔次 預設三檔
.setCheckNumMode() //QQ選擇風格
.setCompressQuality() // 圖片裁剪質量,預設無損
.setImageSpanCount() // 每行個數
.setSelectMedia() // 已選圖片,傳入在次進去可選中,不能傳入網路圖片
.setCompressFlag() // 1 系統自帶壓縮 2 luban壓縮
.setCompressW() // 壓縮寬 如果值大於圖片原始寬高無效
.setCompressH() // 壓縮高 如果值大於圖片原始寬高無效
.setThemeStyle() // 設定主題樣式
.setPicture_title_color() // 設定標題字型顏色
.setPicture_right_color() // 設定標題右邊字型顏色
.setLeftBackDrawable() // 設定返回鍵圖示
.setStatusBar() // 設定狀態列顏色,預設是和標題欄一致
.setImmersive(false)// 是否改變狀態列字型顏色(黑色)
.setNumComplete(false) // 0/9 完成 樣式
.setClickVideo()// 點選聲音
.create();
或在application進行初始化配置
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
// application 初始化
FunctionOptions options = new FunctionOptions.Builder()
.setType(FunctionConfig.TYPE_IMAGE);
.setCompress(true);
.setGrade(Luban.THIRD_GEAR);
.create();
PictureConfig.getInstance().init(options);
}
}
啟動相簿並拍照
PictureConfig.getInstance().init(options).openPhoto(mContext, resultCallback);
或預設配置
PictureConfig.getInstance().openPhoto(mContext, resultCallback);
單獨啟動拍照或視訊 根據type自動識別
PictureConfig.getInstance().init(options).startOpenCamera(mContext, resultCallback);
或預設配置
PictureConfig.getInstance().startOpenCamera(mContext, resultCallback);
預覽圖片
// 預覽圖片 可長按儲存 也可自定義儲存路徑
PictureConfig.getInstance().externalPicturePreview(MainActivity.this, "/custom_file", position, selectMedia);
PictureConfig.getInstance().externalPicturePreview(mContext, position, selectMedia);
預覽視訊
PictureConfig.getInstance().externalPictureVideo(mContext, selectMedia.get(position).getPath());
圖片回撥完成結果返回
private PictureConfig.OnSelectResultCallback resultCallback = new PictureConfig.OnSelectResultCallback() {
@Override
public void onSelectSuccess(List<LocalMedia> resultList) {
// 多選回撥
selectMedia = resultList;
Log.i("callBack_result", selectMedia.size() + "");
LocalMedia media = resultList.get(0);
if (media.isCut() && !media.isCompressed()) {
// 裁剪過
String path = media.getCutPath();
} else if (media.isCompressed() || (media.isCut() && media.isCompressed())) {
// 壓縮過,或者裁剪同時壓縮過,以最終壓縮過圖片為準
String path = media.getCompressPath();
} else {
// 原圖地址
String path = media.getPath();
}
if (selectMedia != null) {
adapter.setList(selectMedia);
adapter.notifyDataSetChanged();
}
}
@Override
public void onSelectSuccess(LocalMedia media) {
// 單選回撥
selectMedia.add(media);
if (selectMedia != null) {
adapter.setList(selectMedia);
adapter.notifyDataSetChanged();
}
}
};
更新日誌:
版本 v1.5.5
1.修復QQ選擇風格不同相簿下選擇數字下標不重新整理問題
2.修復拍照和截圖時圖片列表圖片錯亂問題
歷史版本:
版本 v1.5.4
移除多餘程式碼,刪除多餘資原始檔
新增圖片裁剪框是否可滑動設定
版本 v1.5.3
修復多圖裁剪壓縮模式下頁面不關閉問題
版本 v1.5.2
修復6.0手機單獨拍照無許可權閃退問題
修復SoundPool在低於sdk21閃退問題
修復中興手機單獨拍照閃退問題
修復三星SM A9100單獨拍照閃退問題
移除eventbus 3.0
版本 v1.5.0
修復三星s6標題欄遮擋問題
專案使用第三方庫:
1.裁剪使用ucrop庫
3.glide:3.7.0
4.rxjava:2.0.5
5.rxandroid:2.0.1
6.photoView
7.luban
混淆配置
-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 enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
相容性測試:
騰訊優測-深度測試-通過率達到100%
演示效果:
相關推薦
android多圖選擇器 圖片/視訊 單選or多選,以及視訊錄製。The is Android Image Selector。
PictureSelector 最近專案中用到多圖選擇上傳的需求,考慮到android機型眾多問題就自己花時間寫了一個,測試了大概60款機型,出現過一些問題也都一一修復了,基本上穩定了特分享出來,介面UI也是商用級的開發者不用在做太多修改了,介面高度自定義,可
android多圖選擇
PictureSelector 最近專案中用到多圖選擇上傳的需求,考慮到android機型眾多問題就自己花時間寫了一個,測試了大概60款機型,出現過一些問題也都一一修復了,基本上穩定了特分享出來,介面UI也是商用級的開發者不用在做太多修改了,介面高度自定義,可以設定符
android多圖選擇 圖片/視訊 單選or多選,以及視訊錄製
最近專案中用到多圖選擇上傳的需求,隨後百度了一下用了別人寫的demo,發現在很多機型上各種不適,閃退等問題,嚴重影響使用,後面我自己寫了一個,公司20幾款手機全部通過,在騰訊雲測中也使用了4,50款手機測試,沒有發現問題,特分享出來。 功能特點: 1.適配android7
理解Android影象處理-拍照、單/多圖選擇器及影象優化
如以上DEMO截圖所示效果,我們對於這種類似的功能肯定不算陌生,因為這可以說是實際開發中一類非常常見的功能需求了。而關於它們的實現,其實主要涉及到的知識面應該就是 Android當中的影象處理了。簡單來說就比如:影象獲取(例如常見的設定頭像(獲取單
android 仿微信多圖選擇器(帶預覽、照相功能)
實現了單選、多選 、拍照 、預覽 等功能;先上圖: 程式碼結構 下面不如正題: 一、新增依賴、許可權 1)新增以下依賴 dependencies { compile fileTree(dir: 'libs', include: ['*.jar'])
Android MultiPhotoContainer多圖選擇容器 快速釋出動態,意見反饋
這是我第一次在CSDN上發表部落格,11年註冊過CSDN,不過基本都是copy他人的資源。在這裡發現很多牛人,也學到很多知識,近來不忙,常常思緒萬千,其中不乏關於Android開發的想法。 我認為優秀的程式設計師應該是想方設法讓自己越來越懶,或者讓團隊更閒,這樣就有
004-React-Native--多圖選擇上傳
conf ack 資料 multiple spa pac .get end ext 參考資料:http://www.jianshu.com/p/488e62ed9656 一:使用react-native-image-crop-picker進行圖片選擇時,並沒有提供
react-native多圖選擇、圖片裁剪(支持ad/ios圖片個數控制)
多圖片 reac 顯示 async object zimage ram 步驟 技術 扯淡: 目前關於rn比較知名並且封裝好的圖片選擇控件很多,不過能同時支持多圖片上傳,個數控制兼容iOS/Ad的卻寥寥無幾,而今天介紹的這款框架可以實現:圖片裁剪、最大圖片個數限制、拍照
OC 使用TZImagePickerController實現簡單的多圖選擇檢視
1.使用pod在專案中匯入TZImagePickerController: pod 'TZImagePickerController' 2.建立檢視ImagePickView: @protocol ImagePickerViewDelegate <NSO
Android 多圖上傳伺服器_At_Swim
圖片我就不上傳了沒有好的圖片 MainActivity,佈局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a
淺談Android多圖(包括大圖)上傳時的記憶體處理,防止記憶體溢位。
Android多圖上傳時,為了防止記憶體溢位,基本只要做好兩點就好了,一是及時釋放已經上傳完的圖片,以及在對圖片處理時,必須是一張一張來,因為對圖片的處理過程是最容易OOM的。 下面有簡單的程式碼說明下, 1、首先,圖片的model, ImageBean model中
react-native多圖選擇、圖片裁剪(支援ad/ios圖片個數控制)
前言: 目前關於rn比較知名並且封裝好的圖片選擇控制元件很多,不過能同時支援多圖片上傳,個數控制相容iOS/Ad的卻寥寥無幾,而今天介紹的這款框架可以實現:圖片裁剪、最大圖片個數限制、拍照、本地相簿等功能。 效果: 使用簡介: 核心程式碼: import ImageP
Android多線程分析之中的一個:使用Thread異步下載圖像
htm .net ins ace tca inside 分享 sdi 集中 Android多線程分析之中的一個:使用Thread異步下載圖像羅朝輝 (http://blog.csdn.net/kesalin)CC 許可。轉載請註明出處打算整理一下對 Android Fr
微信JSSDK上傳預覽多圖,ios/Android。點選檢視大圖,支援滑動。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=dev
android日期時間選擇,有多少天?多少年?以及設定時間選擇範圍(即最大值和最小值)
DatePickerDialog.OnDateSetListener bbrContactsBirthDateListener = new DatePickerDialog.OnDateSetListener() { @Override public void on
Android 仿朋友圈之九宮格多圖顯示(二)
一個仿微信朋友圈和QQ空間的九宮格圖片展示自定義控制元件效果: 一.介紹: 1、當只有1張圖時,可以自己定製圖片寬高,也可以使用預設九宮格的寬高; 2、當只有4張圖時,以2*2的方式顯示; 3、除以上兩種情況下,都是按照3列方式顯示
【教程】【多圖詳解】如何在Eclipse中離線安裝ADT(Android Development Tools)
1. 背景 本來正常情況的話,去下載整合好ADT的Eclipse,就可以直接使用了: 但是呢,(有人)有時候,是本身已經有了Eclipse了,是需要(通過Eclipse)線上下載和安裝ADT的。 結果就遇到了這種問題: 即,在輸入了: 結果死掉了,處
Android高效載入大圖、多圖解決方案,有效避免程式OOM
本篇文章主要內容來自於Android Doc,我翻譯之後又做了些加工,英文好的朋友也可以直接去讀原文。高效載入大圖片我們在編寫Android程式的時候經常要用到許多圖片,不同圖片總是會有不同的形狀、不同的大小,但在大多數情況下,這些圖片都會大於我們程式所需要的大小。比如說系統
Android多維商品屬性SKU選擇
前言: 最近又做到這一塊的需求,以前也做過類似仿淘寶的屬性選擇,當時在網上下載的demo參考,最多也支援兩組商品屬性,用的兩個gridview結合,擴充套件性很差,這次不打算用之前的程式碼,所以重新自己寫了一個demo**(文末附上專案地址)** 如圖所
android webview 載入本地html並且解決多圖卡頓問題
使用webview載入本地html,因為本地html使用多張圖片,滑動起來卡頓,解決方法如下: 把資料夾放入assets資料夾下 Activity載入: WebView wView = (