diff --git a/README.md b/README.md
index d129753..f901482 100644
--- a/README.md
+++ b/README.md
@@ -106,9 +106,10 @@ 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.
+* 2015-5-5
+ 1. Fixed. Can't display some images. (Issue by[sd6352051](https://github.com/sd6352051), [larry](https://github.com/18611480882))
+ 2. Fixed. `ListPopupWindow` can not fill parent
+ 3. Added. Add checked mask.
* 2015-4-16
1. Fixed. Crack when rotate device. (Issue by [@Leminity](https://github.com/Leminity))
@@ -116,6 +117,10 @@ class CustomerActivity extends Activity implements MultiImageSelectorFragment.Ca
3. Change. Demo application shortcut.
4. Change. Readme file.
+* 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
diff --git a/README_zh.md b/README_zh.md
index b4900fa..b6ba2cc 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -106,9 +106,10 @@ class CustomerActivity extends Activity implements MultiImageSelectorFragment.Ca
###更新日志
-* 2015-4-9
- 1. 修复. 当设置 `EXTRA_SHOW_CAMERA` 为 `true` 时, 点击第一个Item会混乱的问题.
- 2. 新增. 支持初始化图片选择设定。
+* 2015-5-5
+ 1. 修复. 某些图片无法显示. (Issue by[sd6352051](https://github.com/sd6352051), [larry](https://github.com/18611480882))
+ 2. 修复. `ListPopupWindow` 无法填充父控件
+ 3. 新增. 选中的遮罩效果.
* 2015-4-16
1. 修复. 旋转设备时,程序会崩溃. (Issue by [@Leminity](https://github.com/Leminity))
@@ -116,6 +117,11 @@ class CustomerActivity extends Activity implements MultiImageSelectorFragment.Ca
3. 更改. 演示程序截图.
4. 更改. Readme 文件.
+* 2015-4-9
+ 1. 修复. 当设置 `EXTRA_SHOW_CAMERA` 为 `true` 时, 点击第一个Item会混乱的问题.
+ 2. 新增. 支持初始化图片选择设定。
+
+
-------------------
###感谢
diff --git a/multi-image-selector/build.gradle b/multi-image-selector/build.gradle
index 3e16f12..397c989 100644
--- a/multi-image-selector/build.gradle
+++ b/multi-image-selector/build.gradle
@@ -21,5 +21,5 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
- compile 'com.squareup.picasso:picasso:2.5.2'
+ compile 'com.squareup.picasso:picasso:2.4.0'
}
diff --git a/multi-image-selector/multi-image-selector.iml b/multi-image-selector/multi-image-selector.iml
index 658af94..325fdde 100644
--- a/multi-image-selector/multi-image-selector.iml
+++ b/multi-image-selector/multi-image-selector.iml
@@ -90,6 +90,6 @@
-
+
\ No newline at end of file
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 01876c6..cf0a0b6 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
@@ -5,9 +5,12 @@ import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.database.Cursor;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
+import android.os.Handler;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
@@ -93,6 +96,9 @@ public class MultiImageSelectorFragment extends Fragment {
private int mDesireImageCount;
private boolean hasFolderGened = false;
+ private boolean mIsShowCamera = false;
+
+ private int mGridWidth, mGridHeight;
private File mTmpFile;
@@ -130,16 +136,11 @@ public class MultiImageSelectorFragment extends Fragment {
}
// 是否显示照相机
- final boolean showCamera = getArguments().getBoolean(EXTRA_SHOW_CAMERA, true);
- mImageAdapter = new ImageGridAdapter(getActivity(), showCamera);
+ mIsShowCamera = getArguments().getBoolean(EXTRA_SHOW_CAMERA, true);
+ mImageAdapter = new ImageGridAdapter(getActivity(), mIsShowCamera);
// 是否显示选择指示器
mImageAdapter.showSelectIndicator(mode == MODE_MULTI);
- // 如果显示了照相机,则创建临时文件
- if(showCamera){
- mTmpFile = FileUtils.createTmpFile(getActivity());
- }
-
mPopupAnchorView = view.findViewById(R.id.footer);
mTimeLineText = (TextView) view.findViewById(R.id.timeline_area);
@@ -152,9 +153,14 @@ public class MultiImageSelectorFragment extends Fragment {
mCategoryText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- if(mFolderPopupWindow.isShowing()){
+
+ if(mFolderPopupWindow == null){
+ createPopupFolderList(mGridWidth, mGridHeight);
+ }
+
+ if (mFolderPopupWindow.isShowing()) {
mFolderPopupWindow.dismiss();
- }else {
+ } else {
mFolderPopupWindow.show();
int index = mFolderAdapter.getSelectIndex();
index = index == 0 ? index : index - 1;
@@ -215,16 +221,15 @@ public class MultiImageSelectorFragment extends Fragment {
final int width = mGridView.getWidth();
final int height = mGridView.getHeight();
+ mGridWidth = width;
+ mGridHeight = height;
+
final int desireSize = getResources().getDimensionPixelOffset(R.dimen.image_size);
final int numCount = width / desireSize;
final int columnSpace = getResources().getDimensionPixelOffset(R.dimen.space_size);
int columnWidth = (width - columnSpace*(numCount-1)) / numCount;
mImageAdapter.setItemSize(columnWidth);
- if(mFolderPopupWindow == null){
- createPopupFolderList(width, height);
- }
-
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
mGridView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}else{
@@ -260,33 +265,49 @@ public class MultiImageSelectorFragment extends Fragment {
*/
private void createPopupFolderList(int width, int height) {
mFolderPopupWindow = new ListPopupWindow(getActivity());
+ mFolderPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
mFolderPopupWindow.setAdapter(mFolderAdapter);
mFolderPopupWindow.setContentWidth(width);
- mFolderPopupWindow.setHeight(height * 5/8);
+ mFolderPopupWindow.setWidth(width);
+ mFolderPopupWindow.setHeight(height * 5 / 8);
mFolderPopupWindow.setAnchorView(mPopupAnchorView);
mFolderPopupWindow.setModal(true);
mFolderPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
- if (i == 0) {
- getActivity().getSupportLoaderManager().restartLoader(LOADER_ALL, null, mLoaderCallback);
- mCategoryText.setText(R.string.folder_all);
- mImageAdapter.setShowCamera(true);
- } else {
- Folder folder = (Folder) adapterView.getAdapter().getItem(i);
- if (null != folder) {
- Bundle args = new Bundle();
- args.putString("path", folder.path);
- getActivity().getSupportLoaderManager().restartLoader(LOADER_CATEGORY, args, mLoaderCallback);
- mCategoryText.setText(folder.name);
- }
- mImageAdapter.setShowCamera(false);
- }
- mFolderAdapter.setSelectIndex(i);
- mFolderPopupWindow.dismiss();
- // 滑动到最初始位置
- mGridView.smoothScrollToPosition(0);
+ mFolderAdapter.setSelectIndex(i);
+
+ final int index = i;
+ final AdapterView v = adapterView;
+
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ mFolderPopupWindow.dismiss();
+
+ if (index == 0) {
+ getActivity().getSupportLoaderManager().restartLoader(LOADER_ALL, null, mLoaderCallback);
+ mCategoryText.setText(R.string.folder_all);
+ if (mIsShowCamera) {
+ mImageAdapter.setShowCamera(true);
+ } else {
+ mImageAdapter.setShowCamera(false);
+ }
+ } else {
+ Folder folder = (Folder) v.getAdapter().getItem(index);
+ if (null != folder) {
+ mImageAdapter.setData(folder.images);
+ mCategoryText.setText(folder.name);
+ }
+ mImageAdapter.setShowCamera(false);
+ }
+
+ // 滑动到最初始位置
+ mGridView.smoothScrollToPosition(0);
+ }
+ }, 100);
+
}
});
}
@@ -303,13 +324,17 @@ public class MultiImageSelectorFragment extends Fragment {
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 相机拍照完成后,返回图片路径
- if(resultCode == Activity.RESULT_OK) {
- if(requestCode == REQUEST_CAMERA){
+ if(requestCode == REQUEST_CAMERA){
+ if(resultCode == Activity.RESULT_OK) {
if (mTmpFile != null) {
if (mCallback != null) {
mCallback.onCameraShot(mTmpFile);
}
}
+ }else{
+ if(mTmpFile != null && mTmpFile.exists()){
+ mTmpFile.delete();
+ }
}
}
}
@@ -318,8 +343,6 @@ public class MultiImageSelectorFragment extends Fragment {
public void onConfigurationChanged(Configuration newConfig) {
Log.d(TAG, "on change");
- final int orientation = newConfig.orientation;
-
if(mFolderPopupWindow != null){
if(mFolderPopupWindow.isShowing()){
mFolderPopupWindow.dismiss();
@@ -327,27 +350,28 @@ public class MultiImageSelectorFragment extends Fragment {
}
mGridView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
- @Override @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
+ @Override
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void onGlobalLayout() {
final int height = mGridView.getHeight();
final int desireSize = getResources().getDimensionPixelOffset(R.dimen.image_size);
- Log.d(TAG, "Desire Size = "+desireSize);
+ Log.d(TAG, "Desire Size = " + desireSize);
final int numCount = mGridView.getWidth() / desireSize;
- Log.d(TAG, "Grid Size = "+mGridView.getWidth());
- Log.d(TAG, "num count = "+numCount);
+ Log.d(TAG, "Grid Size = " + mGridView.getWidth());
+ Log.d(TAG, "num count = " + numCount);
final int columnSpace = getResources().getDimensionPixelOffset(R.dimen.space_size);
- int columnWidth = (mGridView.getWidth() - columnSpace*(numCount-1)) / numCount;
+ int columnWidth = (mGridView.getWidth() - columnSpace * (numCount - 1)) / numCount;
mImageAdapter.setItemSize(columnWidth);
- if(mFolderPopupWindow != null){
- mFolderPopupWindow.setHeight(height * 5/8);
+ if (mFolderPopupWindow != null) {
+ mFolderPopupWindow.setHeight(height * 5 / 8);
}
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
mGridView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
- }else{
+ } else {
mGridView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
@@ -365,6 +389,8 @@ public class MultiImageSelectorFragment extends Fragment {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if(cameraIntent.resolveActivity(getActivity().getPackageManager()) != null){
// 设置系统相机拍照后的输出路径
+ // 创建临时文件
+ mTmpFile = FileUtils.createTmpFile(getActivity());
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTmpFile));
startActivityForResult(cameraIntent, REQUEST_CAMERA);
}else{
@@ -500,9 +526,9 @@ public class MultiImageSelectorFragment extends Fragment {
* 回调接口
*/
public interface Callback{
- public void onSingleImageSelected(String path);
- public void onImageSelected(String path);
- public void onImageUnselected(String path);
- public void onCameraShot(File imageFile);
+ void onSingleImageSelected(String path);
+ void onImageSelected(String path);
+ void onImageUnselected(String path);
+ void onCameraShot(File imageFile);
}
}
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 b1bd1e3..7e5a237 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
@@ -95,7 +95,7 @@ public class FolderAdapter extends BaseAdapter {
if(lastSelected == i){
holder.indicator.setVisibility(View.VISIBLE);
}else{
- holder.indicator.setVisibility(View.GONE);
+ holder.indicator.setVisibility(View.INVISIBLE);
}
}
return view;
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 2e042f5..23bed9d 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
@@ -208,10 +208,12 @@ public class ImageGridAdapter extends BaseAdapter {
class ViewHolde {
ImageView image;
ImageView indicator;
+ View mask;
ViewHolde(View view){
image = (ImageView) view.findViewById(R.id.image);
indicator = (ImageView) view.findViewById(R.id.checkmark);
+ mask = view.findViewById(R.id.mask);
view.setTag(this);
}
@@ -223,9 +225,11 @@ public class ImageGridAdapter extends BaseAdapter {
if(mSelectedImages.contains(data)){
// 设置选中状态
indicator.setImageResource(R.drawable.btn_selected);
+ mask.setVisibility(View.VISIBLE);
}else{
// 未选择
indicator.setImageResource(R.drawable.btn_unselected);
+ mask.setVisibility(View.GONE);
}
}else{
indicator.setVisibility(View.GONE);
diff --git a/multi-image-selector/src/main/res/color/folder_text_color.xml b/multi-image-selector/src/main/res/color/folder_text_color.xml
new file mode 100644
index 0000000..0a07caf
--- /dev/null
+++ b/multi-image-selector/src/main/res/color/folder_text_color.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/multi-image-selector/src/main/res/layout-v14/fragment_multi_image.xml b/multi-image-selector/src/main/res/layout-v14/fragment_multi_image.xml
new file mode 100644
index 0000000..1b41929
--- /dev/null
+++ b/multi-image-selector/src/main/res/layout-v14/fragment_multi_image.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multi-image-selector/src/main/res/layout/fragment_multi_image.xml b/multi-image-selector/src/main/res/layout/fragment_multi_image.xml
index 20cf2a8..b41e16e 100644
--- a/multi-image-selector/src/main/res/layout/fragment_multi_image.xml
+++ b/multi-image-selector/src/main/res/layout/fragment_multi_image.xml
@@ -31,28 +31,30 @@
-
-
+ android:layout_height="wrap_content">
-
\ No newline at end of file
+
\ No newline at end of file
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 b0f335d..b45f380 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
@@ -9,6 +9,13 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
+
+