Support initial seleted images setting
This commit is contained in:
parent
ddb5734e79
commit
4676bb6853
10
README.md
10
README.md
|
|
@ -56,7 +56,7 @@ No more steps, just enjoy. :)
|
||||||
|
|
||||||
###Custom Activity Style
|
###Custom Activity Style
|
||||||
* Custome your own Activity
|
* Custome your own Activity
|
||||||
``` java
|
```java
|
||||||
class CustomerActivity extends Activity implements MultiImageSelectorFragment.Callback{
|
class CustomerActivity extends Activity implements MultiImageSelectorFragment.Callback{
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
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
|
###Thanks
|
||||||
|
|
||||||
* [square-picasso](https://github.com/square/picasso) A powerful image downloading and caching library for Android
|
* [square-picasso](https://github.com/square/picasso) A powerful image downloading and caching library for Android
|
||||||
|
|
|
||||||
14
README_zh.md
14
README_zh.md
|
|
@ -1,5 +1,5 @@
|
||||||
# MultiImageSelector
|
# MultiImageSelector
|
||||||
仿微信实现多图选择。支持单选和多选两张模式
|
仿微信实现多图选择。支持单选和多选两种模式
|
||||||
|
|
||||||
[English Doc](README.md)
|
[English Doc](README.md)
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
* 第2步
|
* 第2步
|
||||||
代码中调用,例如:
|
代码中调用,例如:
|
||||||
``` java
|
```java
|
||||||
Intent intent = new Intent(mContext, MultiImageSelectorActivity.class);
|
Intent intent = new Intent(mContext, MultiImageSelectorActivity.class);
|
||||||
|
|
||||||
// 是否显示调用相机拍照
|
// 是否显示调用相机拍照
|
||||||
|
|
@ -56,7 +56,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
|
||||||
###自定义显示
|
###自定义显示
|
||||||
* 自定义Activity
|
* 自定义Activity
|
||||||
``` java
|
```java
|
||||||
class CustomerActivity extends Activity implements MultiImageSelectorFragment.Callback{
|
class CustomerActivity extends Activity implements MultiImageSelectorFragment.Callback{
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
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
|
* [square-picasso](https://github.com/square/picasso) A powerful image downloading and caching library for Android
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import android.widget.EditText;
|
||||||
import android.widget.RadioGroup;
|
import android.widget.RadioGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import me.nereo.multi_image_selector.MultiImageSelectorActivity;
|
import me.nereo.multi_image_selector.MultiImageSelectorActivity;
|
||||||
|
|
@ -25,6 +26,8 @@ public class MainActivity extends ActionBarActivity {
|
||||||
private RadioGroup mChoiceMode, mShowCamera;
|
private RadioGroup mChoiceMode, mShowCamera;
|
||||||
private EditText mRequestNum;
|
private EditText mRequestNum;
|
||||||
|
|
||||||
|
private ArrayList<String> mSelectPath;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(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_COUNT, maxNum);
|
||||||
// 选择模式
|
// 选择模式
|
||||||
intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_MODE, selectedMode);
|
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);
|
startActivityForResult(intent, REQUEST_IMAGE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -84,9 +91,9 @@ public class MainActivity extends ActionBarActivity {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if(requestCode == REQUEST_IMAGE){
|
if(requestCode == REQUEST_IMAGE){
|
||||||
if(resultCode == RESULT_OK){
|
if(resultCode == RESULT_OK){
|
||||||
List<String> path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT);
|
mSelectPath = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT);
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for(String p: path){
|
for(String p: mSelectPath){
|
||||||
sb.append(p);
|
sb.append(p);
|
||||||
sb.append("\n");
|
sb.append("\n");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ public class MultiImageSelectorActivity extends FragmentActivity implements Mult
|
||||||
public static final String EXTRA_SHOW_CAMERA = "show_camera";
|
public static final String EXTRA_SHOW_CAMERA = "show_camera";
|
||||||
/** 选择结果,返回为 ArrayList<String> 图片路径集合 */
|
/** 选择结果,返回为 ArrayList<String> 图片路径集合 */
|
||||||
public static final String EXTRA_RESULT = "select_result";
|
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;
|
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);
|
mDefaultCount = intent.getIntExtra(EXTRA_SELECT_COUNT, 9);
|
||||||
int mode = intent.getIntExtra(EXTRA_SELECT_MODE, MODE_MULTI);
|
int mode = intent.getIntExtra(EXTRA_SELECT_MODE, MODE_MULTI);
|
||||||
boolean isShow = intent.getBooleanExtra(EXTRA_SHOW_CAMERA, true);
|
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 bundle = new Bundle();
|
||||||
bundle.putInt(MultiImageSelectorFragment.EXTRA_SELECT_COUNT, mDefaultCount);
|
bundle.putInt(MultiImageSelectorFragment.EXTRA_SELECT_COUNT, mDefaultCount);
|
||||||
bundle.putInt(MultiImageSelectorFragment.EXTRA_SELECT_MODE, mode);
|
bundle.putInt(MultiImageSelectorFragment.EXTRA_SELECT_MODE, mode);
|
||||||
bundle.putBoolean(MultiImageSelectorFragment.EXTRA_SHOW_CAMERA, isShow);
|
bundle.putBoolean(MultiImageSelectorFragment.EXTRA_SHOW_CAMERA, isShow);
|
||||||
|
bundle.putStringArrayList(MultiImageSelectorFragment.EXTRA_DEFAULT_SELECTED_LIST, resultList);
|
||||||
|
|
||||||
getSupportFragmentManager().beginTransaction()
|
getSupportFragmentManager().beginTransaction()
|
||||||
.add(R.id.image_grid, Fragment.instantiate(this, MultiImageSelectorFragment.class.getName(), bundle))
|
.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){
|
if(resultList == null || resultList.size()<=0){
|
||||||
mSubmitButton.setText("完成");
|
mSubmitButton.setText("完成");
|
||||||
mSubmitButton.setEnabled(false);
|
mSubmitButton.setEnabled(false);
|
||||||
|
}else{
|
||||||
|
mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")");
|
||||||
|
mSubmitButton.setEnabled(true);
|
||||||
}
|
}
|
||||||
mSubmitButton.setOnClickListener(new View.OnClickListener() {
|
mSubmitButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -110,6 +119,8 @@ public class MultiImageSelectorActivity extends FragmentActivity implements Mult
|
||||||
if(resultList.contains(path)){
|
if(resultList.contains(path)){
|
||||||
resultList.remove(path);
|
resultList.remove(path);
|
||||||
mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")");
|
mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")");
|
||||||
|
}else{
|
||||||
|
mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")");
|
||||||
}
|
}
|
||||||
// 当为选择图片时候的状态
|
// 当为选择图片时候的状态
|
||||||
if(resultList.size() == 0){
|
if(resultList.size() == 0){
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,8 @@ public class MultiImageSelectorFragment extends Fragment {
|
||||||
public static final String EXTRA_SELECT_MODE = "select_count_mode";
|
public static final String EXTRA_SELECT_MODE = "select_count_mode";
|
||||||
/** 是否显示相机,boolean类型 */
|
/** 是否显示相机,boolean类型 */
|
||||||
public static final String EXTRA_SHOW_CAMERA = "show_camera";
|
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;
|
public static final int MODE_SINGLE = 0;
|
||||||
/** 多选 */
|
/** 多选 */
|
||||||
|
|
@ -114,6 +116,14 @@ public class MultiImageSelectorFragment extends Fragment {
|
||||||
// 图片选择模式
|
// 图片选择模式
|
||||||
final int mode = getArguments().getInt(EXTRA_SELECT_MODE);
|
final int mode = getArguments().getInt(EXTRA_SELECT_MODE);
|
||||||
|
|
||||||
|
// 默认选择
|
||||||
|
if(mode == MODE_MULTI) {
|
||||||
|
ArrayList<String> tmp = getArguments().getStringArrayList(EXTRA_DEFAULT_SELECTED_LIST);
|
||||||
|
if(tmp != null && tmp.size()>0) {
|
||||||
|
resultList = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 是否显示照相机
|
// 是否显示照相机
|
||||||
final boolean showCamera = getArguments().getBoolean(EXTRA_SHOW_CAMERA, true);
|
final boolean showCamera = getArguments().getBoolean(EXTRA_SHOW_CAMERA, true);
|
||||||
mImageAdapter = new ImageGridAdapter(getActivity(), showCamera);
|
mImageAdapter = new ImageGridAdapter(getActivity(), showCamera);
|
||||||
|
|
@ -210,7 +220,7 @@ public class MultiImageSelectorFragment extends Fragment {
|
||||||
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
||||||
if(showCamera){
|
if(mImageAdapter.isShowCamera()){
|
||||||
// 如果显示照相机,则第一个Grid显示为照相机,处理特殊逻辑
|
// 如果显示照相机,则第一个Grid显示为照相机,处理特殊逻辑
|
||||||
if(i == 0){
|
if(i == 0){
|
||||||
showCameraAction();
|
showCameraAction();
|
||||||
|
|
@ -413,6 +423,12 @@ public class MultiImageSelectorFragment extends Fragment {
|
||||||
}while(data.moveToNext());
|
}while(data.moveToNext());
|
||||||
|
|
||||||
mImageAdapter.setData(images);
|
mImageAdapter.setData(images);
|
||||||
|
|
||||||
|
// 设定默认选择
|
||||||
|
if(resultList != null && resultList.size()>0){
|
||||||
|
mImageAdapter.setDefaultSelected(resultList);
|
||||||
|
}
|
||||||
|
|
||||||
mFolderAdapter.setData(mResultFolder);
|
mFolderAdapter.setData(mResultFolder);
|
||||||
hasFolderGened = true;
|
hasFolderGened = true;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ public class FolderAdapter extends BaseAdapter {
|
||||||
// 显示图片
|
// 显示图片
|
||||||
Picasso.with(mContext)
|
Picasso.with(mContext)
|
||||||
.load(new File(data.cover.path))
|
.load(new File(data.cover.path))
|
||||||
.error(R.drawable.default_error)
|
.placeholder(R.drawable.default_error)
|
||||||
.resize(mImageSize, mImageSize)
|
.resize(mImageSize, mImageSize)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.into(cover);
|
.into(cover);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package me.nereo.multi_image_selector.adapter;
|
package me.nereo.multi_image_selector.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
@ -32,7 +33,6 @@ public class ImageGridAdapter extends BaseAdapter {
|
||||||
private LayoutInflater mInflater;
|
private LayoutInflater mInflater;
|
||||||
private boolean showCamera = true;
|
private boolean showCamera = true;
|
||||||
private boolean showSelectIndicator = true;
|
private boolean showSelectIndicator = true;
|
||||||
private boolean justChangeIndicator = false;
|
|
||||||
|
|
||||||
private List<Image> mImages = new ArrayList<>();
|
private List<Image> mImages = new ArrayList<>();
|
||||||
private List<Image> mSelectedImages = new ArrayList<>();
|
private List<Image> mSelectedImages = new ArrayList<>();
|
||||||
|
|
@ -61,6 +61,10 @@ public class ImageGridAdapter extends BaseAdapter {
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isShowCamera(){
|
||||||
|
return showCamera;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 选择某个图片,改变选择状态
|
* 选择某个图片,改变选择状态
|
||||||
* @param image
|
* @param image
|
||||||
|
|
@ -71,17 +75,42 @@ public class ImageGridAdapter extends BaseAdapter {
|
||||||
}else{
|
}else{
|
||||||
mSelectedImages.add(image);
|
mSelectedImages.add(image);
|
||||||
}
|
}
|
||||||
justChangeIndicator = true;
|
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过图片路径设置默认选择
|
||||||
|
* @param resultList
|
||||||
|
*/
|
||||||
|
public void setDefaultSelected(ArrayList<String> 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
|
* @param images
|
||||||
*/
|
*/
|
||||||
public void setData(List<Image> images) {
|
public void setData(List<Image> images) {
|
||||||
mSelectedImages.clear();
|
mSelectedImages.clear();
|
||||||
justChangeIndicator = false;
|
|
||||||
|
|
||||||
if(images != null && images.size()>0){
|
if(images != null && images.size()>0){
|
||||||
mImages = images;
|
mImages = images;
|
||||||
|
|
@ -224,7 +253,7 @@ public class ImageGridAdapter extends BaseAdapter {
|
||||||
Picasso.with(mContext)
|
Picasso.with(mContext)
|
||||||
.load(imageFile)
|
.load(imageFile)
|
||||||
.placeholder(R.drawable.default_error)
|
.placeholder(R.drawable.default_error)
|
||||||
.error(R.drawable.default_error)
|
//.error(R.drawable.default_error)
|
||||||
.resize(mItemSize, mItemSize)
|
.resize(mItemSize, mItemSize)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.into(image);
|
.into(image);
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@
|
||||||
android:id="@+id/cover"
|
android:id="@+id/cover"
|
||||||
tools:src="@drawable/btn_back"
|
tools:src="@drawable/btn_back"
|
||||||
android:layout_gravity="center_vertical"
|
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_width="@dimen/folder_cover_size"
|
||||||
android:layout_height="@dimen/folder_cover_size" />
|
android:layout_height="@dimen/folder_cover_size" />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/image"
|
android:id="@+id/image"
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerInside"
|
||||||
|
android:src="@drawable/default_error"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue