首先非常感谢https://github.com/donglua/PhotoPicker点击打开链接提供了这么优秀的图片选择框架,但是有些小问题,在使用https://github.com/glassLake/PhotoPicker点击打开链接的时候,不能够直接使用多次进入PhotoPicker选择图片的功能(类似于记忆上一次选择项的功能),还有图片的选择有限制等。正所谓自己动手,丰衣足食,所以我就自己来着手改造了下。
转载请注明出处:http://blog.csdn.net/u010724819/article/details/53415023
效果图如下:
最初,我在项目目录utils中添加了一个工具类,MyPhotoUtils
package me.iwf.photopicker.utils;
import android.app.Application;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Jiang on 2016/10/28.
*/
public class MyPhotoUtil extends Application{
public static Map mPhotos;
public static int FORRESULT = 100;
public static void putPhotoMap(Object mSelectedphotos) {
mPhotos = new HashMap<String,String>();
mPhotos.put("photos",mSelectedphotos);
}
public static Object getPhotoMap(){
if(mPhotos.get("photos") == null){
return 0;
}else{
return mPhotos.get("photos");
}
}
}
在这里我最初的处理是在原项目自定义RecycleView点击右上角删除按钮的时候,进行了全局变量的更新:
holder.deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
photoPaths.remove(position);
MyPhotoUtil.putPhotoMap(photoPaths);
notifyDataSetChanged();
}
});
再其次来处理进入图片详情的时候,我们来做的图片删除处理,这里也是将其路径集合放入了全局变量:
if (action == MultiPickResultView.ACTION_SELECT){
titlebar.setRitht(getApplicationContext().getResources().getDrawable(R.drawable.__picker_delete), "", new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = pagerFragment.getViewPager().getCurrentItem();
if (pagerFragment.getPaths().size() >0){
pagerFragment.getPaths().remove(position);
pagerFragment.getViewPager().getAdapter().notifyDataSetChanged();
if (pagerFragment.getPaths().size() ==0){
titlebar.setTitle(getString(R.string.__picker_preview) +" "+getString(R.string.__picker_image_index, 0,
pagerFragment.getPaths().size()));
}
MyPhotoUtil.putPhotoMap(pagerFragment.getPaths());
}
}
});
}
处理完了这两处的全局集合,我们来处理下回调事件OnActivityResult()
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Intent datad = data;
//这里捕捉异常
try{
tempPathslook = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS);
}catch (Exception ex){
// Toast.makeText(TestActivity.this,ex.toString(),Toast.LENGTH_SHORT).show();
}
//判断当前的集合和返回集合的差异,如果返回的更多,则添加进去,否则,则将其替换为返回的集合
if(tempPathslook.size()>pathslook.size()){
for (String temp : tempPathslook) {
if (!pathslook.contains(temp)) {
pathslook.add(temp);
}
}
}else{
pathslook = tempPathslook;
}
// data.putStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS, pathslook);
// recyclerView.onActivityResult(requestCode,resultCode,data);
MyPhotoUtil.putPhotoMap(pathslook);
// ArrayList<String> temp = pathslook;
// recyclerView.showPics(temp);
recyclerView.init(this, MultiPickResultView.ACTION_SELECT, pathslook);
}
在OnResume()方法中,也做了显示的处理:
@Override
protected void onResume() {
super.onResume();
try {
pathslook = (ArrayList<String>) MyPhotoUtil.getPhotoMap();
} catch (Exception ex) {
// Toast.makeText(this, ex.toString(), Toast.LENGTH_SHORT).show();
}
if(pathslook!=null){
recyclerView.init(this, MultiPickResultView.ACTION_SELECT, pathslook);
}
}
最终的图片本地路径集合全部存储在了对象:pathslook之中,大家可以使用它来做相关的操作。
文章只是写出了一些重点修改的部分,其余的诸如修改每行显示的数目等请参照原开源框架或者我的源码。
附上源码地址:https://github.com/yeluowuhen502/MyPhotoTest点击打开链接
再次感谢原原作者提供这么好的开源框架,本文只是在其基础上做了一些修改。