android多图选择器 图片/视频 单选or多选,以及视频录制。
PictureSelector
×î½üÏîÄ¿ÖÐÓõ½¶àͼѡÔñÉÏ´«µÄÐèÇ󣬿¼Âǵ½android»úÐÍÖÚ¶àÎÊÌâ¾Í×Ô¼º»¨Ê±¼äдÁËÒ»¸ö£¬²âÊÔÁË´ó¸Å60¿î»úÐÍ£¬³öÏÖ¹ýһЩÎÊÌâÒ²¶¼Ò»Ò»ÐÞ¸´ÁË£¬»ù±¾ÉÏÎȶ¨ÁËÌØ·ÖÏí³öÀ´£¬½çÃæUIÒ²ÊÇÉÌÓü¶µÄ¿ª·¢Õß²»ÓÃÔÚ×öÌ«¶àÐÞ¸ÄÁË£¬½çÃæ¸ß¶È×Ô¶¨Ò壬¿ÉÒÔÉèÖ÷ûºÏÄãÏîÄ¿Ö÷É«µ÷µÄ·ç¸ñ£¬¼¯³ÉÍê³Éºó¾Í¿ÉÒÔÄÃÀ´Óá£
ÏîÄ¿»áһֱά»¤£¬·¢ÏÖÎÊÌ⻶ÓÌá³ö»áµÚһʱ¼äÐÞ¸´£¬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ѹËõµµ´ÎÉèÖÃ
ÄÇЩÓöµ½ÅÄÕÕÉÁÍËÎÊÌâµÄͬѧ£¬Çë¼ÇµÃ¿´ÇåÏÂÃæÊÊÅä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.4.1'
}
·½Ê½¶þ 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.4.1</version>
</dependency>
ÏîÄ¿¸ùĿ¼
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
}
³£¼û´íÎó*
ÎÊÌâÒ»£º
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½Úµã£¬
\[Çë²Î¿¼ÎҵIJ©¿Í\](http://blog.csdn.net/luck_mw/article/details/54970105)µÄ½â¾ö·½°¸
ÎÊÌâÈý£º
PhotoView ¿â³åÍ»£¬¿ÉÒÔɾ³ý×Ô¼ºÏîÄ¿ÖÐÒýÓõģ¬Picture_libraryÖÐÒѾÒýÓùý£¬»òÒýÓÃcom.commit451:PhotoView:1.2.4°æ±¾
Ïà²áÆô¶¯¹¹Ôì·½·¨
FunctionOptions options = new FunctionOptions.Builder()
.setType(selectType) // ͼƬorÊÓƵ FunctionConfig.TYPE_IMAGE TYPE_VIDEO
.setCropMode(copyMode) // ²Ã¼ôģʽ ĬÈÏ¡¢1:1¡¢3:4¡¢3:2¡¢16:9
.setCompress(isCompress) //ÊÇ·ñѹËõ
.setEnablePixelCompress(true) //ÊÇ·ñÆôÓÃÏñËØѹËõ
.setEnableQualityCompress(true) //ÊÇ·ñÆôÖÊÁ¿Ñ¹Ëõ
.setMaxSelectNum(maxSelectNum) // ¿ÉÑ¡ÔñͼƬµÄÊýÁ¿
.setSelectMode(selectMode) // µ¥Ñ¡ or ¶àÑ¡
.setShowCamera(isShow) //ÊÇ·ñÏÔʾÅÄÕÕÑ¡Ïî ÕâÀï×Ô¶¯¸ù¾Ýtype Æô¶¯ÅÄÕÕ»ò¼ÊÓƵ
.setEnablePreview(enablePreview) // ÊÇ·ñ´ò¿ªÔ¤ÀÀÑ¡Ïî
.setEnableCrop(enableCrop) // ÊÇ·ñ´ò¿ª¼ôÇÐÑ¡Ïî
.setPreviewVideo(isPreviewVideo) // ÊÇ·ñÔ¤ÀÀÊÓƵ(²¥·Å) mode or ¶àÑ¡ÓÐЧ
.setCheckedBoxDrawable(checkedBoxDrawable)
.setRecordVideoDefinition(FunctionConfig.HIGH) // ÊÓƵÇåÎú¶È
.setRecordVideoSecond(60) // ÊÓƵÃëÊý
.setGif(false)// ÊÇ·ñÏÔʾgifͼƬ£¬Ä¬Èϲ»ÏÔʾ
.setCropW(cropW) // cropW-->²Ã¼ô¿í¶È Öµ²»ÄÜСÓÚ100 Èç¹ûÖµ´óÓÚͼƬÔʼ¿í¸ß ½«·µ»ØÔͼ´óС
.setCropH(cropH) // cropH-->²Ã¼ô¸ß¶È Öµ²»ÄÜСÓÚ100 Èç¹ûÖµ´óÓÚͼƬÔʼ¿í¸ß ½«·µ»ØÔͼ´óС
.setMaxB(maxB) // ѹËõ×î´óÖµ ÀýÈç:200kb ¾ÍÉèÖÃ202400£¬202400 / 1024 = 200kb×óÓÒ
.setPreviewColor(previewColor) //Ô¤ÀÀ×ÖÌåÑÕÉ«
.setCompleteColor(completeColor) //ÒÑÍê³É×ÖÌåÑÕÉ«
.setPreviewBottomBgColor(previewBottomBgColor) //Ô¤ÀÀµ×²¿±³¾°É«
.setBottomBgColor(bottomBgColor) //ͼƬÁбíµ×²¿±³¾°É«
.setGrade(Luban.THIRD_GEAR) // ѹËõµµ´Î ĬÈÏÈýµµ
.setCheckNumMode(isCheckNumMode)
.setCompressQuality(100) // ͼƬ²Ã¼ôÖÊÁ¿,ĬÈÏÎÞËð
.setImageSpanCount(4) // ÿÐиöÊý
.setSelectMedia(selectMedia) // ÒÑѡͼƬ£¬´«ÈëÔڴνøÈ¥¿ÉÑ¡ÖУ¬²»ÄÜ´«ÈëÍøÂçͼƬ
.setCompressFlag(compressFlag) // 1 ϵͳ×Ô´øѹËõ 2 lubanѹËõ
.setCompressW(compressW) // ѹËõ¿í Èç¹ûÖµ´óÓÚͼƬÔʼ¿í¸ßÎÞЧ
.setCompressH(compressH) // ѹËõ¸ß Èç¹ûÖµ´óÓÚͼƬÔʼ¿í¸ßÎÞЧ
.setThemeStyle(themeStyle) // ÉèÖÃÖ÷ÌâÑùʽ
.create();
Æô¶¯Ïà²á²¢ÅÄÕÕ
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(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();
}
}
};
¸üÐÂÈÕÖ¾£º
°æ±¾ v1.4.1
1.ÐÞ¸´µ¥Ñ¡¿ìËÙµã»÷Öظ´bug
2.ÖØÃüÃûstring×ÊÔ´Îļþ
========================================================
ÀúÊ·°æ±¾***
°æ±¾ v1.4.0
1.¼õСÒýÈë´óС
°æ±¾ v1.3.9
1.ÐÞ¸ÄÏà²áÆô¶¯·½Ê½
2.ÐÞ¸´.webp¸ñʽͼƬѹËõºóºó׺±äΪ.jpg¸ñʽÎÊÌâ
3.ÐÞ¸´¶àͼ²Ã¼ô¿ìËÙµã»÷£¬½á¹û·µ»ØΪ¿ÕÎÊÌâ
4.ÐÞ¸´¿ìËÙµã»÷Æô¶¯Ïà²áÖظ´ÎÊÌâ
5.½«activityͨÐÅÓɹ㲥¸ÄΪEventBus3.0
6.ÐÞ¸´¶àͼ²Ã¼ôѹËõbug
ÏîĿʹÓõÚÈý·½¿â£º
1.²Ã¼ôʹÓÃucrop¿â
2.eventbus:3.0.0'
3.glide:3.7.0
4.rxjava:2.0.5
5.rxandroid:2.0.1
6.okhttp:3.2.0
7.PhotoView:1.2.4
8.Luban
¼æÈÝÐÔ²âÊÔ£º
ÌÚѶÓŲâ-Éî¶È²âÊÔ-ͨ¹ýÂÊ´ïµ½100%