用途
在App中经常会让用户选择多张图片,而单单调用系统的实现在有的手机上并不好实现这个功能,所以有了这个项目
下载地址
[gt href='https://github.com/wudkj/ImageSelector']ImageSelector[/gt]该项目同同时需要[gt href='https://github.com/wudkj/ImageViewpager']ImageViewpager[/gt]来支持,后面的项目是一个图片预览器 着急使用的看到这里就可以了,下面是我做时候的一些想法,谢谢关注设计与实现
想法
我来说一下我的想法:- 1、获得相册列表
- 2、展示其中的一个相册
- 3、点击按钮展示相册列表,点击列表中的一个之后切换展示的相册
- 4、点击图片进入到图片预览界面,界面中可以显示当前选中的相册的所有图片,也可以显示已经选中的图片
- 5、静态方法设置回调,尝试抛弃Activity中的OnActivityResult,使用回调来替代
实现
- 1、相册列表的获取
- 2、展示其中的一个相册
在这里,页面的左下角就是当前选择的相册的名字,中间是一个GridView,用来展示相册的图片,看下layout
为了保存选择的图片(不用保存图片,只需要保存图片的地址就可以了),我在Bimp.java中做了一个list,保存已经选择了的图片,同时会有一个个数控制器,如果选择的个数大于了传过来的那个个数,那么就不能往里面添加了(ImageChooserActivity.java中的check方法)
因为不只可以通过checkBox来选中,还有预览当前相册的时候选中,预览所有选中项的时候的取消选中,所以在相册预览里面也有对数量的判断,这样就保证了选择的数量不能超过传递过来的最大值
- 3、切换相册
这里我选择了动画形式来显示/隐藏一个view来实现
这里2就是那个显示相册的列表,通过动画让他从下面那显示了出来,同时1那里改变了颜色,选择了相册之后再让它消失掉,1的颜色再改回来,模拟了一个dialog或者说PopupWindow
ImagePagerActivity.startActivityWithHF_NotSelected(act, position, pathList, Bimp.drr, maxPic, new ImagePagerActivity.OnSelectedListener() {
@Override
public void onSelected(boolean ifSelected, String path) {
if (ifSelected) {
Bimp.drr.add(path);
} else {
Bimp.drr.remove(path);
}
updateSelect(ifSelected, path);
}
});
在图片选中之后,会回调过来,根据是否选中的状态来判断是否添加进入保存的列表,最后更新ui即可
使用拍照功能
SumileTakePhotoUtil.takePhoto(MainActivity.this, new SumileImageChooserUtil.ActivityResult() {
@Override
public void onActivityResult(Intent data) {
String path = data.getStringExtra("data");//图片地址
}
});
具体实现和上面的5、util的做法一样,但是我觉得方便了很多