提交 4676bb68 编写于 作者: N Nereo

Support initial seleted images setting

上级 ddb5734e
......@@ -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
......
# 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
......
......@@ -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<String> 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<String> 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");
}
......
......@@ -24,6 +24,8 @@ public class MultiImageSelectorActivity extends FragmentActivity implements Mult
public static final String EXTRA_SHOW_CAMERA = "show_camera";
/** 选择结果,返回为 ArrayList&lt;String&gt; 图片路径集合 */
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){
......
......@@ -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<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);
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;
......
......@@ -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);
......
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<Image> mImages = new ArrayList<>();
private List<Image> 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<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
*/
public void setData(List<Image> 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);
......
......@@ -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" />
......
......@@ -4,7 +4,8 @@
<ImageView
android:id="@+id/image"
android:scaleType="centerCrop"
android:scaleType="centerInside"
android:src="@drawable/default_error"
android:layout_width="match_parent"
android:layout_height="match_parent" />
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册