Skip to content

Commit b54297b

Browse files
committed
添加gif标识图,更新版本号,更新README.MD
1 parent e5d6dee commit b54297b

File tree

9 files changed

+70
-86
lines changed

9 files changed

+70
-86
lines changed

README.md

+20-69
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,35 @@
11
# 高仿微信图片选择器
22

3-
#### 注意开发细节,尽可能的做到加载速度最快,目前支持图片单选,多选,多文件夹切换,自定义图片加载器等功能。
3+
#### 注意开发细节,尽可能的做到加载速度最快,目前支持图片,视频单选,多选,多文件夹切换,大图预览,自定义图片加载器等功能。
44

55
#### 效果图:
66
![](https://github.com/Lichenwei-Dev/ImagePicker/blob/master/screenshot/Screenshot1.png)
77
![](https://github.com/Lichenwei-Dev/ImagePicker/blob/master/screenshot/Screenshot2.png)
88
![](https://github.com/Lichenwei-Dev/ImagePicker/blob/master/screenshot/Screenshot3.png)
99
![](https://github.com/Lichenwei-Dev/ImagePicker/blob/master/screenshot/Screenshot4.png)
1010

11-
11+
相比1.0.+版本,2.0版本进行了代码的大块重构,注重模块间的代码解耦,简化了配置,将兼容Android7.0所需要的FileProvider下沉到库中完成,不再需要开发者配置,并对GIF图,视频,大图预览等功能有了支持。
1212

1313
### 使用方式:
14-
1、在项目下的build.gradle文件中引入(注意gradle的版本):
14+
15+
1、如何 在项目中引入该图片加载库:
1516
```
1617
//gradle版本在3.0以下引入此行
17-
compile 'com.lcw.library:imagepicker:1.1.4'
18+
compile 'com.lcw.library:imagepicker:2.0.0'
1819
1920
//gradle版本在3.0以上引入此行
20-
implementation 'com.lcw.library:imagepicker:1.1.4'
21+
implementation 'com.lcw.library:imagepicker:2.0.0'
2122
```
2223

23-
2、然后需要在AndroidManifest.xml里声明组件:
24+
2、需要在AndroidManifest.xml里声明组件:
2425
```
2526
<application>
2627
....
27-
<!--图片选择器的主Activity-->
28+
<!--图片列表Activity-->
2829
<activity
2930
android:name="com.lcw.library.imagepicker.activity.ImagePickerActivity"
3031
android:screenOrientation="portrait" />
31-
<!--图片大图预览-->
32+
<!--大图预览Activity-->
3233
<activity
3334
android:name="com.lcw.library.imagepicker.activity.ImagePreActivity"
3435
android:screenOrientation="portrait" />
@@ -37,18 +38,20 @@ implementation 'com.lcw.library:imagepicker:1.1.4'
3738
3839
```
3940

40-
41-
3、调用方式非常简单,只需要简单一行代码:
41+
3、一行代码调用:
4242
```
43-
ImagePicker.getInstance()
43+
ImagePicker.getInstance()
4444
.setTitle("标题")//设置标题
4545
.showCamera(true)//设置是否显示拍照按钮
46+
.showImage(true)//设置是否展示图片
47+
.showVideo(true)//设置是否展示视频
4648
.setMaxCount(9)//设置最大选择图片数目(默认为1,单选)
49+
.setImagePaths(mImageList)//保存上一次选择图片的状态,如果不需要可以忽略
4750
.setImageLoader(new GlideLoader())//设置自定义图片加载器
48-
.start(mContext, REQUEST_SELECT_IMAGES_CODE);//REQEST_SELECT_IMAGES_CODE为Intent调用的requestCode
51+
.start(MainActivity.this, REQUEST_SELECT_IMAGES_CODE);//REQEST_SELECT_IMAGES_CODE为Intent调用的requestCode
4952
```
5053

51-
4、获取选择图片返回的数据
54+
4、如何获取选中的图片集合
5255
```
5356
@Override
5457
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
@@ -58,74 +61,22 @@ implementation 'com.lcw.library:imagepicker:1.1.4'
5861
}
5962
```
6063

61-
5、关于自定义图片加载器,不具体指定图片加载框架,让开发者更加灵活的定制,只需要去实现ImageLoader接口即可:
64+
5、如何自定义图片加载器(让开发者更加灵活的定制,只需要去实现ImageLoader接口即可
6265
```
6366
public class GlideLoader implements ImageLoader {
64-
65-
@Override
66-
public void loadImage(ImageView imageView, String imagePah) {
67-
//小图加载,这里以Glide图片加载框架为例
68-
RequestOptions options = new RequestOptions()
69-
.centerCrop()
70-
.placeholder(R.mipmap.icon_image_default)
71-
.error(R.mipmap.icon_image_error);
72-
Glide.with(imageView.getContext()).load(imagePah).apply(options).into(imageView);
73-
}
74-
67+
//to do something 可以参考Demo用法
7568
}
7669
```
7770

78-
6、关于权限,6.0以后危险权限需要动态申请,不了解的同学可以看下我之前写过的一篇文章[《适配Android6.0动态权限管理》](https://www.jianshu.com/p/a37f4827079a),由于国内各大厂商的ROM存在差异化,需要经常处理一些兼容上的问题,也有比较成熟的开源库,为了简洁,本Library就不提供此功能,请开发者自行处理,所需权限:
71+
6、关于权限,6.0以后危险权限需要动态申请,不了解的同学可以看下我之前写过的一篇文章[《适配Android6.0动态权限管理》](https://www.jianshu.com/p/a37f4827079a),由于国内各大厂商的ROM存在差异化,需要经常处理一些兼容上的问题,也有比较成熟的开源库支持,为了简洁,本Library就不提供此功能,请开发者自行处理,所需权限:
7972
```
8073
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
8174
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
8275
<uses-permission android:name="android.permission.CAMERA" />
8376
```
8477

85-
7、最后需要注意的是在Android7.0后私有目录被限制访问,这里做了兼容处理,在开启拍照按钮的时候需要注意:
86-
87-
(1)首先需要在AndroidManifest.xml里声明组件:
88-
```
89-
<application>
90-
....
91-
<!-- Android 7.0 文件共享配置 -->
92-
<provider
93-
android:name="android.support.v4.content.FileProvider"
94-
android:authorities="com.lcw.library.imagepicker.provider"
95-
android:exported="false"
96-
android:grantUriPermissions="true">
97-
<meta-data
98-
android:name="android.support.FILE_PROVIDER_PATHS"
99-
android:resource="@xml/image_picker" />
100-
</provider>
101-
....
102-
</application>
103-
```
104-
(2)然后在res文件夹下建立一个xml文件夹,放置xml文件(image_picker.xml)即可,xml内容如下:
105-
```
106-
<?xml version="1.0" encoding="utf-8"?>
107-
<paths>
108-
<external-path
109-
name="imagePicker"
110-
path="" />
111-
</paths>
112-
```
113-
114-
8、其他:
115-
根据业务的需求,有时候我们在选择一部分图片后,再次跳转图片选择器的时候,想要去保存已经勾选的图片状态,这边也提供了对应的方法,只需要把onActivityResult返回的图片路径List集合,重新设置进来即可,代码如下:
116-
```
117-
ImagePicker.getInstance()
118-
.setTitle("标题")
119-
.showCamera(true)
120-
.setMaxCount(9)
121-
.setImagePaths(mImagePaths)//设置list
122-
.setImageLoader(new GlideLoader())
123-
.start(MainActivity.this, REQUEST_SELECT_IMAGES_CODE);
124-
```
125-
126-
12778

128-
版本会持续迭代,未完待续。。。(欢迎Star,欢迎Fork)
79+
版本会持续迭代,欢迎大家给建议。。。(欢迎Star,欢迎Fork)
12980

13081

13182

app/build.gradle

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ android {
66
applicationId "com.lcw.demo.imagepicker"
77
minSdkVersion 16
88
targetSdkVersion 27
9-
versionCode 113
10-
versionName "1.1.3"
9+
versionCode 200
10+
versionName "2.0.0"
1111
}
1212
buildTypes {
1313
release {
@@ -29,4 +29,8 @@ dependencies {
2929

3030
implementation project(':imagepicker')
3131
// implementation 'com.lcw.library:imagepicker:1.1.3'
32+
33+
// debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2'
34+
// releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2'
35+
3236
}

app/src/main/java/com/lcw/demo/imagepicker/GlideLoader.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ public class GlideLoader implements ImageLoader {
2323
.placeholder(R.mipmap.icon_image_default)
2424
.error(R.mipmap.icon_image_error);
2525

26-
private RequestOptions mPreOptions = new RequestOptions().error(R.mipmap.icon_image_error);
26+
private RequestOptions mPreOptions = new RequestOptions()
27+
.skipMemoryCache(true)
28+
.error(R.mipmap.icon_image_error);
2729

2830
@Override
2931
public void loadImage(ImageView imageView, String imagePath) {
@@ -41,12 +43,12 @@ public void loadPreImage(ImageView imageView, String imagePath) {
4143
@Override
4244
public void loadVideoPlay(ImageView imageView, String path) {
4345
//实现播放视频的跳转逻辑
46+
4447
}
4548

4649
@Override
4750
public void clearMemoryCache() {
4851
//清理缓存
4952
Glide.get(MApplication.getContext()).clearMemory();
50-
5153
}
5254
}

app/src/main/java/com/lcw/demo/imagepicker/MainActivity.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,13 @@ protected void onCreate(Bundle savedInstanceState) {
2626
@Override
2727
public void onClick(View v) {
2828
ImagePicker.getInstance()
29-
.setTitle("多图选择器")
30-
.showCamera(true)
31-
.showImage(true)
32-
.showVideo(true)
33-
.setMaxCount(9)
34-
.setImagePaths(mImagePaths)
35-
.setImageLoader(new GlideLoader())
36-
.start(MainActivity.this, REQUEST_SELECT_IMAGES_CODE);
29+
.setTitle("标题")//设置标题
30+
.showCamera(true)//设置是否显示拍照按钮
31+
.showImage(true)//设置是否展示图片
32+
.showVideo(true)//设置是否展示视频
33+
.setMaxCount(9)//设置最大选择图片数目(默认为1,单选)
34+
.setImageLoader(new GlideLoader())//设置自定义图片加载器
35+
.start(MainActivity.this, REQUEST_SELECT_IMAGES_CODE);//REQEST_SELECT_IMAGES_CODE为Intent调用的requestCode
3736
}
3837
});
3938

imagepicker/build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ publish {
55
userOrg = 'lichenwei'
66
groupId = 'com.lcw.library'
77
artifactId = 'imagepicker'
8-
publishVersion = '1.1.4'
8+
publishVersion = '2.0.0'
99
desc = 'Android image picker library'
1010
website = 'https://github.com/Lichenwei-Dev/ImagePicker'
1111
}
@@ -15,8 +15,8 @@ android {
1515
defaultConfig {
1616
minSdkVersion 16
1717
targetSdkVersion 27
18-
versionCode 114
19-
versionName "1.1.4"
18+
versionCode 200
19+
versionName "2.0.0"
2020
}
2121

2222
buildTypes {

imagepicker/src/main/java/com/lcw/library/imagepicker/activity/ImagePickerActivity.java

+9
Original file line numberDiff line numberDiff line change
@@ -533,4 +533,13 @@ public void onBackPressed() {
533533
super.onBackPressed();
534534
}
535535

536+
@Override
537+
protected void onDestroy() {
538+
super.onDestroy();
539+
try {
540+
ConfigManager.getInstance().getImageLoader().clearMemoryCache();
541+
} catch (Exception e) {
542+
e.printStackTrace();
543+
}
544+
}
536545
}

imagepicker/src/main/java/com/lcw/library/imagepicker/adapter/ImagePickerAdapter.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -163,15 +163,20 @@ private void bindMedia(MediaHolder mediaHolder, MediaFile mediaFile) {
163163
}
164164
}
165165

166-
167166
try {
168167
ConfigManager.getInstance().getImageLoader().loadImage(mediaHolder.mImageView, imagePath);
169168
} catch (Exception e) {
170169
e.printStackTrace();
171170
}
172171

173172
if (mediaHolder instanceof ImageHolder) {
174-
// TODO: 2019/1/22 如果是图片且是gif,需要展示gif图标
173+
//如果是gif图,显示gif标识
174+
String suffix = imagePath.substring(imagePath.lastIndexOf(".") + 1);
175+
if (suffix.equals("gif") || suffix.equals("GIF")) {
176+
((ImageHolder) mediaHolder).mImageGif.setVisibility(View.VISIBLE);
177+
} else {
178+
((ImageHolder) mediaHolder).mImageGif.setVisibility(View.GONE);
179+
}
175180
}
176181

177182
if (mediaHolder instanceof VideoHolder) {
@@ -187,8 +192,12 @@ private void bindMedia(MediaHolder mediaHolder, MediaFile mediaFile) {
187192
* 图片Item
188193
*/
189194
class ImageHolder extends MediaHolder {
195+
196+
public ImageView mImageGif;
197+
190198
public ImageHolder(View itemView) {
191199
super(itemView);
200+
mImageGif = itemView.findViewById(R.id.iv_item_gif);
192201
}
193202
}
194203

imagepicker/src/main/res/layout/item_recyclerview_image.xml

+10
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,15 @@
2121
android:scaleType="centerCrop"
2222
android:src="@mipmap/icon_image_checked" />
2323

24+
<ImageView
25+
android:id="@+id/iv_item_gif"
26+
android:layout_width="30dp"
27+
android:layout_height="30dp"
28+
android:layout_alignParentBottom="true"
29+
android:layout_marginLeft="6dp"
30+
android:scaleType="centerCrop"
31+
android:src="@mipmap/icon_gif"
32+
android:visibility="visible" />
33+
2434

2535
</com.lcw.library.imagepicker.view.SquareRelativeLayout>
488 Bytes
Loading

0 commit comments

Comments
 (0)