diff --git a/README.md b/README.md index 2a6e790..05050ce 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ No more steps, just enjoy. :) ###Custom Activity Style * Custome your own Activity -``` java +```java class CustomerActivity extends Activity implements MultiImageSelectorFragment.Callback{ @Override protected void onCreate(Bundle savedInstanceState) { @@ -95,6 +95,14 @@ class CustomerActivity extends Activity implements MultiImageSelectorFragment.Ca ------------------- +###Change Log + +* 2015-4-9 + 1. Fixed. When set `EXTRA_SHOW_CAMERA` to `true`, the first grid item onclick event were messed. + 2. Add. Support initial selected image list. + +------------------- + ###Thanks * [square-picasso](https://github.com/square/picasso) A powerful image downloading and caching library for Android diff --git a/README_zh.md b/README_zh.md index a119606..d82d4fe 100644 --- a/README_zh.md +++ b/README_zh.md @@ -1,5 +1,5 @@ # MultiImageSelector -仿微信实现多图选择。支持单选和多选两张模式 +仿微信实现多图选择。支持单选和多选两种模式 [English Doc](README.md) @@ -18,7 +18,7 @@ * 第2步 代码中调用,例如: -``` java +```java Intent intent = new Intent(mContext, MultiImageSelectorActivity.class); // 是否显示调用相机拍照 @@ -56,7 +56,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { ###自定义显示 * 自定义Activity -``` java +```java class CustomerActivity extends Activity implements MultiImageSelectorFragment.Callback{ @Override protected void onCreate(Bundle savedInstanceState) { @@ -95,6 +95,14 @@ class CustomerActivity extends Activity implements MultiImageSelectorFragment.Ca ------------------- +###更新日志 + +* 2015-4-9 + 1. 修复. 当设置 `EXTRA_SHOW_CAMERA` 为 `true` 时, 点击第一个Item会混乱的问题. + 2. 新增. 支持初始化图片选择设定。 + +------------------- + ###感谢 * [square-picasso](https://github.com/square/picasso) A powerful image downloading and caching library for Android diff --git a/app/src/main/java/me/nereo/multiimageselector/MainActivity.java b/app/src/main/java/me/nereo/multiimageselector/MainActivity.java index 075595a..1667963 100644 --- a/app/src/main/java/me/nereo/multiimageselector/MainActivity.java +++ b/app/src/main/java/me/nereo/multiimageselector/MainActivity.java @@ -12,6 +12,7 @@ import android.widget.EditText; import android.widget.RadioGroup; import android.widget.TextView; +import java.util.ArrayList; import java.util.List; import me.nereo.multi_image_selector.MultiImageSelectorActivity; @@ -25,6 +26,8 @@ public class MainActivity extends ActionBarActivity { private RadioGroup mChoiceMode, mShowCamera; private EditText mRequestNum; + private ArrayList mSelectPath; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -73,6 +76,10 @@ public class MainActivity extends ActionBarActivity { intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_COUNT, maxNum); // 选择模式 intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_MODE, selectedMode); + // 默认选择 + if(mSelectPath != null && mSelectPath.size()>0){ + intent.putExtra(MultiImageSelectorActivity.EXTRA_DEFAULT_SELECTED_LIST, mSelectPath); + } startActivityForResult(intent, REQUEST_IMAGE); } @@ -84,9 +91,9 @@ public class MainActivity extends ActionBarActivity { super.onActivityResult(requestCode, resultCode, data); if(requestCode == REQUEST_IMAGE){ if(resultCode == RESULT_OK){ - List path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT); + mSelectPath = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT); StringBuilder sb = new StringBuilder(); - for(String p: path){ + for(String p: mSelectPath){ sb.append(p); sb.append("\n"); } diff --git a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorActivity.java b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorActivity.java index e41ae20..ac6976c 100644 --- a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorActivity.java +++ b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorActivity.java @@ -24,6 +24,8 @@ public class MultiImageSelectorActivity extends FragmentActivity implements Mult public static final String EXTRA_SHOW_CAMERA = "show_camera"; /** 选择结果,返回为 ArrayList<String> 图片路径集合 */ public static final String EXTRA_RESULT = "select_result"; + /** 默认选择集 */ + public static final String EXTRA_DEFAULT_SELECTED_LIST = "default_list"; /** 单选 */ public static final int MODE_SINGLE = 0; @@ -43,11 +45,15 @@ public class MultiImageSelectorActivity extends FragmentActivity implements Mult mDefaultCount = intent.getIntExtra(EXTRA_SELECT_COUNT, 9); int mode = intent.getIntExtra(EXTRA_SELECT_MODE, MODE_MULTI); boolean isShow = intent.getBooleanExtra(EXTRA_SHOW_CAMERA, true); + if(mode == MODE_MULTI && intent.hasExtra(EXTRA_DEFAULT_SELECTED_LIST)) { + resultList = intent.getStringArrayListExtra(EXTRA_DEFAULT_SELECTED_LIST); + } Bundle bundle = new Bundle(); bundle.putInt(MultiImageSelectorFragment.EXTRA_SELECT_COUNT, mDefaultCount); bundle.putInt(MultiImageSelectorFragment.EXTRA_SELECT_MODE, mode); bundle.putBoolean(MultiImageSelectorFragment.EXTRA_SHOW_CAMERA, isShow); + bundle.putStringArrayList(MultiImageSelectorFragment.EXTRA_DEFAULT_SELECTED_LIST, resultList); getSupportFragmentManager().beginTransaction() .add(R.id.image_grid, Fragment.instantiate(this, MultiImageSelectorFragment.class.getName(), bundle)) @@ -67,6 +73,9 @@ public class MultiImageSelectorActivity extends FragmentActivity implements Mult if(resultList == null || resultList.size()<=0){ mSubmitButton.setText("完成"); mSubmitButton.setEnabled(false); + }else{ + mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")"); + mSubmitButton.setEnabled(true); } mSubmitButton.setOnClickListener(new View.OnClickListener() { @Override @@ -110,6 +119,8 @@ public class MultiImageSelectorActivity extends FragmentActivity implements Mult if(resultList.contains(path)){ resultList.remove(path); mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")"); + }else{ + mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")"); } // 当为选择图片时候的状态 if(resultList.size() == 0){ diff --git a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorFragment.java b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorFragment.java index 3123642..b99f6ca 100644 --- a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorFragment.java +++ b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorFragment.java @@ -50,6 +50,8 @@ public class MultiImageSelectorFragment extends Fragment { public static final String EXTRA_SELECT_MODE = "select_count_mode"; /** 是否显示相机,boolean类型 */ public static final String EXTRA_SHOW_CAMERA = "show_camera"; + /** 默认选择的数据集 */ + public static final String EXTRA_DEFAULT_SELECTED_LIST = "default_result"; /** 单选 */ public static final int MODE_SINGLE = 0; /** 多选 */ @@ -114,6 +116,14 @@ public class MultiImageSelectorFragment extends Fragment { // 图片选择模式 final int mode = getArguments().getInt(EXTRA_SELECT_MODE); + // 默认选择 + if(mode == MODE_MULTI) { + ArrayList tmp = getArguments().getStringArrayList(EXTRA_DEFAULT_SELECTED_LIST); + if(tmp != null && tmp.size()>0) { + resultList = tmp; + } + } + // 是否显示照相机 final boolean showCamera = getArguments().getBoolean(EXTRA_SHOW_CAMERA, true); mImageAdapter = new ImageGridAdapter(getActivity(), showCamera); @@ -210,7 +220,7 @@ public class MultiImageSelectorFragment extends Fragment { mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { - if(showCamera){ + if(mImageAdapter.isShowCamera()){ // 如果显示照相机,则第一个Grid显示为照相机,处理特殊逻辑 if(i == 0){ showCameraAction(); @@ -413,6 +423,12 @@ public class MultiImageSelectorFragment extends Fragment { }while(data.moveToNext()); mImageAdapter.setData(images); + + // 设定默认选择 + if(resultList != null && resultList.size()>0){ + mImageAdapter.setDefaultSelected(resultList); + } + mFolderAdapter.setData(mResultFolder); hasFolderGened = true; diff --git a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/adapter/FolderAdapter.java b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/adapter/FolderAdapter.java index 404b6c3..b1bd1e3 100644 --- a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/adapter/FolderAdapter.java +++ b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/adapter/FolderAdapter.java @@ -141,7 +141,7 @@ public class FolderAdapter extends BaseAdapter { // 显示图片 Picasso.with(mContext) .load(new File(data.cover.path)) - .error(R.drawable.default_error) + .placeholder(R.drawable.default_error) .resize(mImageSize, mImageSize) .centerCrop() .into(cover); diff --git a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/adapter/ImageGridAdapter.java b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/adapter/ImageGridAdapter.java index 2edf083..c47e2b1 100644 --- a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/adapter/ImageGridAdapter.java +++ b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/adapter/ImageGridAdapter.java @@ -1,6 +1,7 @@ package me.nereo.multi_image_selector.adapter; import android.content.Context; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -32,7 +33,6 @@ public class ImageGridAdapter extends BaseAdapter { private LayoutInflater mInflater; private boolean showCamera = true; private boolean showSelectIndicator = true; - private boolean justChangeIndicator = false; private List mImages = new ArrayList<>(); private List mSelectedImages = new ArrayList<>(); @@ -61,6 +61,10 @@ public class ImageGridAdapter extends BaseAdapter { notifyDataSetChanged(); } + public boolean isShowCamera(){ + return showCamera; + } + /** * 选择某个图片,改变选择状态 * @param image @@ -71,17 +75,42 @@ public class ImageGridAdapter extends BaseAdapter { }else{ mSelectedImages.add(image); } - justChangeIndicator = true; notifyDataSetChanged(); } + /** + * 通过图片路径设置默认选择 + * @param resultList + */ + public void setDefaultSelected(ArrayList resultList) { + for(String path : resultList){ + Image image = getImageByPath(path); + if(image != null){ + mSelectedImages.add(image); + } + } + if(mSelectedImages.size() > 0){ + notifyDataSetChanged(); + } + } + + private Image getImageByPath(String path){ + if(mImages != null && mImages.size()>0){ + for(Image image : mImages){ + if(image.path.equalsIgnoreCase(path)){ + return image; + } + } + } + return null; + } + /** * 设置数据集 * @param images */ public void setData(List images) { mSelectedImages.clear(); - justChangeIndicator = false; if(images != null && images.size()>0){ mImages = images; @@ -224,7 +253,7 @@ public class ImageGridAdapter extends BaseAdapter { Picasso.with(mContext) .load(imageFile) .placeholder(R.drawable.default_error) - .error(R.drawable.default_error) + //.error(R.drawable.default_error) .resize(mItemSize, mItemSize) .centerCrop() .into(image); diff --git a/multi-image-selector/src/main/res/layout/list_item_folder.xml b/multi-image-selector/src/main/res/layout/list_item_folder.xml index 46e95ec..c977a9d 100644 --- a/multi-image-selector/src/main/res/layout/list_item_folder.xml +++ b/multi-image-selector/src/main/res/layout/list_item_folder.xml @@ -14,7 +14,8 @@ android:id="@+id/cover" tools:src="@drawable/btn_back" android:layout_gravity="center_vertical" - android:scaleType="centerCrop" + android:scaleType="centerInside" + android:src="@drawable/default_error" android:layout_width="@dimen/folder_cover_size" android:layout_height="@dimen/folder_cover_size" /> diff --git a/multi-image-selector/src/main/res/layout/list_item_image.xml b/multi-image-selector/src/main/res/layout/list_item_image.xml index 27fc3b0..b0f335d 100644 --- a/multi-image-selector/src/main/res/layout/list_item_image.xml +++ b/multi-image-selector/src/main/res/layout/list_item_image.xml @@ -4,7 +4,8 @@