</pre><span style="font-size:18px;"> 最近业务需求,需要实现一个图片选择器,要用来更改用户的头像,网上的也挺多,但是刚看到一个第三方库ImageSeclect,变来实现一下这个功能,感觉挺好用的,简单方便,可以实现从图库选择或者拍照设置头像,在加载图片的时候本来想用picasso,但是没实现,就用了Glide,感觉也蛮好用的,看效果:</span><p></p><p><span style="font-size:18px;"></span></p><p><span style="font-size:18px;">下面是使用的第三方库 </span></p><pre name="code" class="java"><pre name="code" class="java"> compile 'com.yancy.imageselector:imageselector:1.3.3'
compile 'com.github.bumptech.glide:glide:3.7.0
实现原理很简单,找到需要更改图片的控件,可以是ImageView或者ImageButton或者其他的,看需求,给其设置一个单击事件既可以进行图片的选择操作,同时可以处理图片,当然多选也是可能的,这部分比肩简单,然后就可以具体的业务代码了。
下面是具体的操作了:
看源代码得知需要先定义一个ImageLoader,先定义,如下
new ImageLoader() {//ImageLoader定义imageseclet的每一项的缩略图的加载
@Override
public void displayImage(Context context, String path, ImageView imageView) {//此处暂时若使用picasso会出现无缩略图的状况,没解决
Glide.with(context)
.load(path)
.crop(1, 2, 500, 500)
.into(imageView);
看来得现有一个imageLoader,用于在ImageSeclect的图片所有图片展示页面加载每一张图片,代码如下
</pre><span style="font-size:18px;"></span><pre name="code" class="java">ImageConfig imageConfig = new ImageConfig.Builder(imageLoade) //ImageLoader定义imageseclet的每一项的缩略图的加载
.crop(1, 1, 500, 500)// (截图默认配置:关闭 比例 1:1 长宽比 输出分辨率 500*500)
.singleSelect() // 开启单选 (默认为多选)
.filePath("/ImageSelector/Pictures") // 拍照后存放的图片路径(默认 /temp/picture) (会自动创建)
.showCamera() // 开启拍照功能 (默认关闭)
.requestCode(REQUEST_CODE)
.build();
此处不想新建一个类,所以使用内部类了。
ImageSelector.open(MainActivity.this, imageConfig); // 开启图片选择器
此时已完成对ImageSeclect的初始话,可以使用了,但是![生气](http://static.blog.csdn.net/xheditor/xheditor_emot/default/mad.gif)
Intent intent = new Intent(fragment.getActivity(), ImageSelectorActivity.class);
其实ImageSeclect内部是封装好的一个Activity,那么我们就可以通过重写OnActivityResult方法得到intent的数据了,代码如下(
先定义一个常量final int REQUEST_CODE = 1000;表示ImageSeclect的结果码
)
<pre name="code" class="java">@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {//得到选择的裁剪过的图片的路径
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null) {//此处暂时为有优化
List<String> pathList = data.getStringArrayListExtra(ImageSelectorActivity.EXTRA_RESULT);
for (String path : pathList) {
Glide.with(MainActivity.this).load(path).into(logo);//将图片加载到需要更换的控件上,此时就完成了更换头像等
System.out.println(path);
}
}
<pre name="code" class="java">
好的,到此就算是更换完毕了,如果需要设置为圆形的话,可以重写通过对Glide的Transform属性进行配置,与Picasso类似,上Demo(已实现圆形),记得存储读写和相机权限啊,传送门。
OK,完事!!!