diff --git a/app/build.gradle b/app/build.gradle index 6536c30..e26c855 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 - buildToolsVersion "23.0.3" + compileSdkVersion 24 + buildToolsVersion "24.0.1" defaultConfig { applicationId "me.nereo.multiimageselector" - minSdkVersion 12 + minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" @@ -21,6 +21,8 @@ android { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:appcompat-v7:23.4.0' + compile 'com.android.support:support-compat:24.2.0' + compile 'com.android.support:design:24.2.0' + compile project(':multi-image-selector') } diff --git a/build.gradle b/build.gradle index f6e9073..e69de29 100644 --- a/build.gradle +++ b/build.gradle @@ -1,19 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - jcenter() - } -} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7af1915..f6d2cb8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed May 18 11:49:16 CST 2016 +#Tue Aug 23 14:55:54 MSK 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/multi-image-selector/build.gradle b/multi-image-selector/build.gradle index dba9a97..c40ac8a 100644 --- a/multi-image-selector/build.gradle +++ b/multi-image-selector/build.gradle @@ -1,20 +1,27 @@ +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:2.1.3' + } +} + apply plugin: 'com.android.library' +allprojects { + repositories { + jcenter() + } +} android { - compileSdkVersion 23 - buildToolsVersion "23.0.3" + compileSdkVersion 24 + buildToolsVersion "24.0.1" defaultConfig { - minSdkVersion 12 + minSdkVersion 14 + //noinspection OldTargetApi targetSdkVersion 23 - versionCode 1 - versionName "1.1" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } } resourcePrefix "mis_" @@ -22,6 +29,9 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:23.4.0' + + compile 'com.android.support:support-compat:24.2.1' + compile 'com.android.support:design:24.2.1' + compile 'com.squareup.picasso:picasso:2.4.0' } 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 26905ca..134bbd3 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 @@ -5,13 +5,13 @@ import android.graphics.Color; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; -import android.widget.Button; import java.io.File; import java.util.ArrayList; @@ -22,43 +22,52 @@ import java.util.ArrayList; * Updated by nereo on 2016/1/19. * Updated by nereo on 2016/5/18. */ -public class MultiImageSelectorActivity extends AppCompatActivity - implements MultiImageSelectorFragment.Callback{ +public class MultiImageSelectorActivity extends AppCompatActivity implements MultiImageSelectorFragment.Callback { // Single choice public static final int MODE_SINGLE = 0; // Multi choice public static final int MODE_MULTI = 1; - /** Max image size,int,{@link #DEFAULT_IMAGE_SIZE} by default */ + /** + * Max image size,int,{@link #DEFAULT_IMAGE_SIZE} by default + */ public static final String EXTRA_SELECT_COUNT = "max_select_count"; - /** Select mode,{@link #MODE_MULTI} by default */ + /** + * Select mode,{@link #MODE_MULTI} by default + */ public static final String EXTRA_SELECT_MODE = "select_count_mode"; - /** Whether show camera,true by default */ + /** + * Whether show camera,true by default + */ public static final String EXTRA_SHOW_CAMERA = "show_camera"; - /** Result data set,ArrayList<String>*/ + /** + * Result data set,ArrayList<String> + */ public static final String EXTRA_RESULT = "select_result"; - /** Original data set */ + /** + * Original data set + */ public static final String EXTRA_DEFAULT_SELECTED_LIST = "default_list"; // Default image size private static final int DEFAULT_IMAGE_SIZE = 9; + @NonNull private ArrayList resultList = new ArrayList<>(); - private Button mSubmitButton; - private int mDefaultCount = DEFAULT_IMAGE_SIZE; + + private View submitButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setTheme(R.style.MIS_NO_ACTIONBAR); setContentView(R.layout.mis_activity_default); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(Color.BLACK); } - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - if(toolbar != null){ + final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + if (toolbar != null) { setSupportActionBar(toolbar); } @@ -68,37 +77,36 @@ public class MultiImageSelectorActivity extends AppCompatActivity } final Intent intent = getIntent(); - mDefaultCount = intent.getIntExtra(EXTRA_SELECT_COUNT, DEFAULT_IMAGE_SIZE); + final int mDefaultCount = intent.getIntExtra(EXTRA_SELECT_COUNT, DEFAULT_IMAGE_SIZE); final int mode = intent.getIntExtra(EXTRA_SELECT_MODE, MODE_MULTI); final boolean isShow = intent.getBooleanExtra(EXTRA_SHOW_CAMERA, true); - if(mode == MODE_MULTI && intent.hasExtra(EXTRA_DEFAULT_SELECTED_LIST)) { + if (mode == MODE_MULTI && intent.hasExtra(EXTRA_DEFAULT_SELECTED_LIST)) { resultList = intent.getStringArrayListExtra(EXTRA_DEFAULT_SELECTED_LIST); } - mSubmitButton = (Button) findViewById(R.id.commit); - if(mode == MODE_MULTI){ - updateDoneText(resultList); - mSubmitButton.setVisibility(View.VISIBLE); - mSubmitButton.setOnClickListener(new View.OnClickListener() { + submitButton = findViewById(R.id.multi_image_selector_submit_button); + if (mode == MODE_MULTI) { + updateSubmitButton(); + submitButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - if(resultList != null && resultList.size() >0){ + public void onClick(final View v) { + if (!resultList.isEmpty()) { // Notify success Intent data = new Intent(); data.putStringArrayListExtra(EXTRA_RESULT, resultList); setResult(RESULT_OK, data); - }else{ + } else { setResult(RESULT_CANCELED); } finish(); } }); - }else{ - mSubmitButton.setVisibility(View.GONE); + } else { + submitButton.setVisibility(View.GONE); } - if(savedInstanceState == null){ - Bundle bundle = new Bundle(); + if (savedInstanceState == null) { + final 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); @@ -122,26 +130,13 @@ public class MultiImageSelectorActivity extends AppCompatActivity return super.onOptionsItemSelected(item); } - /** - * Update done button by select image data - * @param resultList selected image data - */ - private void updateDoneText(ArrayList resultList){ - int size = 0; - if(resultList == null || resultList.size()<=0){ - mSubmitButton.setText(R.string.mis_action_done); - mSubmitButton.setEnabled(false); - }else{ - size = resultList.size(); - mSubmitButton.setEnabled(true); - } - mSubmitButton.setText(getString(R.string.mis_action_button_string, - getString(R.string.mis_action_done), size, mDefaultCount)); + private void updateSubmitButton() { + submitButton.setEnabled(!resultList.isEmpty()); } @Override - public void onSingleImageSelected(String path) { - Intent data = new Intent(); + public void onSingleImageSelected(final String path) { + final Intent data = new Intent(); resultList.add(path); data.putStringArrayListExtra(EXTRA_RESULT, resultList); setResult(RESULT_OK, data); @@ -149,24 +144,24 @@ public class MultiImageSelectorActivity extends AppCompatActivity } @Override - public void onImageSelected(String path) { - if(!resultList.contains(path)) { + public void onImageSelected(final String path) { + if (!resultList.contains(path)) { resultList.add(path); } - updateDoneText(resultList); + updateSubmitButton(); } @Override - public void onImageUnselected(String path) { - if(resultList.contains(path)){ + public void onImageUnselected(final String path) { + if (resultList.contains(path)) { resultList.remove(path); } - updateDoneText(resultList); + updateSubmitButton(); } @Override - public void onCameraShot(File imageFile) { - if(imageFile != null) { + public void onCameraShot(final File imageFile) { + if (imageFile != null) { // notify system the image has change sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageFile))); @@ -177,4 +172,4 @@ public class MultiImageSelectorActivity extends AppCompatActivity finish(); } } -} +} \ No newline at end of file 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 921b0aa..e9adc55 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 @@ -41,7 +41,7 @@ public class ImageGridAdapter extends BaseAdapter { final int mGridWidth; - public ImageGridAdapter(Context context, boolean showCamera, int column){ + public ImageGridAdapter(Context context, boolean showCamera, int column) { mContext = context; mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.showCamera = showCamera; @@ -51,38 +51,41 @@ public class ImageGridAdapter extends BaseAdapter { Point size = new Point(); wm.getDefaultDisplay().getSize(size); width = size.x; - }else{ + } else { width = wm.getDefaultDisplay().getWidth(); } mGridWidth = width / column; } + /** * 显示选择指示器 + * * @param b */ public void showSelectIndicator(boolean b) { showSelectIndicator = b; } - public void setShowCamera(boolean b){ - if(showCamera == b) return; + public void setShowCamera(boolean b) { + if (showCamera == b) return; showCamera = b; notifyDataSetChanged(); } - public boolean isShowCamera(){ + public boolean isShowCamera() { return showCamera; } /** * 选择某个图片,改变选择状态 + * * @param image */ public void select(Image image) { - if(mSelectedImages.contains(image)){ + if (mSelectedImages.contains(image)) { mSelectedImages.remove(image); - }else{ + } else { mSelectedImages.add(image); } notifyDataSetChanged(); @@ -90,24 +93,25 @@ public class ImageGridAdapter extends BaseAdapter { /** * 通过图片路径设置默认选择 + * * @param resultList */ public void setDefaultSelected(ArrayList resultList) { - for(String path : resultList){ + for (String path : resultList) { Image image = getImageByPath(path); - if(image != null){ + if (image != null) { mSelectedImages.add(image); } } - if(mSelectedImages.size() > 0){ + 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)){ + private Image getImageByPath(String path) { + if (mImages != null && mImages.size() > 0) { + for (Image image : mImages) { + if (image.path.equalsIgnoreCase(path)) { return image; } } @@ -117,14 +121,15 @@ public class ImageGridAdapter extends BaseAdapter { /** * 设置数据集 + * * @param images */ public void setData(List images) { mSelectedImages.clear(); - if(images != null && images.size()>0){ + if (images != null && images.size() > 0) { mImages = images; - }else{ + } else { mImages.clear(); } notifyDataSetChanged(); @@ -137,25 +142,25 @@ public class ImageGridAdapter extends BaseAdapter { @Override public int getItemViewType(int position) { - if(showCamera){ - return position==0 ? TYPE_CAMERA : TYPE_NORMAL; + if (showCamera) { + return position == 0 ? TYPE_CAMERA : TYPE_NORMAL; } return TYPE_NORMAL; } @Override public int getCount() { - return showCamera ? mImages.size()+1 : mImages.size(); + return showCamera ? mImages.size() + 1 : mImages.size(); } @Override public Image getItem(int i) { - if(showCamera){ - if(i == 0){ + if (showCamera) { + if (i == 0) { return null; } - return mImages.get(i-1); - }else{ + return mImages.get(i - 1); + } else { return mImages.get(i); } } @@ -168,22 +173,22 @@ public class ImageGridAdapter extends BaseAdapter { @Override public View getView(int i, View view, ViewGroup viewGroup) { - if(isShowCamera()){ - if(i == 0){ + if (isShowCamera()) { + if (i == 0) { view = mInflater.inflate(R.layout.mis_list_item_camera, viewGroup, false); return view; } } ViewHolder holder; - if(view == null){ + if (view == null) { view = mInflater.inflate(R.layout.mis_list_item_image, viewGroup, false); holder = new ViewHolder(view); - }else{ + } else { holder = (ViewHolder) view.getTag(); } - if(holder != null) { + if (holder != null) { holder.bindData(getItem(i)); } @@ -193,30 +198,30 @@ public class ImageGridAdapter extends BaseAdapter { class ViewHolder { ImageView image; ImageView indicator; - View mask; +// View mask; - ViewHolder(View view){ + ViewHolder(View view) { image = (ImageView) view.findViewById(R.id.image); indicator = (ImageView) view.findViewById(R.id.checkmark); - mask = view.findViewById(R.id.mask); +// mask = view.findViewById(R.id.mask); view.setTag(this); } - void bindData(final Image data){ - if(data == null) return; + void bindData(final Image data) { + if (data == null) return; // 处理单选和多选状态 - if(showSelectIndicator){ + if (showSelectIndicator) { indicator.setVisibility(View.VISIBLE); - if(mSelectedImages.contains(data)){ + if (mSelectedImages.contains(data)) { // 设置选中状态 - indicator.setImageResource(R.drawable.mis_btn_selected); - mask.setVisibility(View.VISIBLE); - }else{ + indicator.setImageResource(R.drawable.mis_checked_button); +// mask.setVisibility(View.VISIBLE); + } else { // 未选择 - indicator.setImageResource(R.drawable.mis_btn_unselected); - mask.setVisibility(View.GONE); + indicator.setImageResource(R.drawable.mis_unchecked_button); +// mask.setVisibility(View.GONE); } - }else{ + } else { indicator.setVisibility(View.GONE); } File imageFile = new File(data.path); @@ -229,7 +234,7 @@ public class ImageGridAdapter extends BaseAdapter { .resize(mGridWidth, mGridWidth) .centerCrop() .into(image); - }else{ + } else { image.setImageResource(R.drawable.mis_default_error); } } diff --git a/multi-image-selector/src/main/res/color/mis_main_menu_button_selector.xml b/multi-image-selector/src/main/res/color/mis_main_menu_button_selector.xml new file mode 100644 index 0000000..6d14c85 --- /dev/null +++ b/multi-image-selector/src/main/res/color/mis_main_menu_button_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/multi-image-selector/src/main/res/drawable-v21/mis_global_dark_selector.xml b/multi-image-selector/src/main/res/drawable-v21/mis_global_dark_selector.xml new file mode 100644 index 0000000..9b26a30 --- /dev/null +++ b/multi-image-selector/src/main/res/drawable-v21/mis_global_dark_selector.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/multi-image-selector/src/main/res/drawable-v21/mis_global_light_selector.xml b/multi-image-selector/src/main/res/drawable-v21/mis_global_light_selector.xml new file mode 100644 index 0000000..921e08a --- /dev/null +++ b/multi-image-selector/src/main/res/drawable-v21/mis_global_light_selector.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/multi-image-selector/src/main/res/drawable-xxhdpi/mis_asv.png b/multi-image-selector/src/main/res/drawable-xxhdpi/mis_asv.png deleted file mode 100644 index 046c621..0000000 Binary files a/multi-image-selector/src/main/res/drawable-xxhdpi/mis_asv.png and /dev/null differ diff --git a/multi-image-selector/src/main/res/drawable-xxhdpi/mis_btn_selected.png b/multi-image-selector/src/main/res/drawable-xxhdpi/mis_btn_selected.png deleted file mode 100644 index d0243ec..0000000 Binary files a/multi-image-selector/src/main/res/drawable-xxhdpi/mis_btn_selected.png and /dev/null differ diff --git a/multi-image-selector/src/main/res/drawable-xxhdpi/mis_checked_button.png b/multi-image-selector/src/main/res/drawable-xxhdpi/mis_checked_button.png new file mode 100644 index 0000000..18c26f9 Binary files /dev/null and b/multi-image-selector/src/main/res/drawable-xxhdpi/mis_checked_button.png differ diff --git a/multi-image-selector/src/main/res/drawable-xxhdpi/mis_photo_icon.png b/multi-image-selector/src/main/res/drawable-xxhdpi/mis_photo_icon.png new file mode 100644 index 0000000..106dae4 Binary files /dev/null and b/multi-image-selector/src/main/res/drawable-xxhdpi/mis_photo_icon.png differ diff --git a/multi-image-selector/src/main/res/drawable-xxhdpi/mis_text_indicator.png b/multi-image-selector/src/main/res/drawable-xxhdpi/mis_text_indicator.png index 7e36af4..ce0d652 100644 Binary files a/multi-image-selector/src/main/res/drawable-xxhdpi/mis_text_indicator.png and b/multi-image-selector/src/main/res/drawable-xxhdpi/mis_text_indicator.png differ diff --git a/multi-image-selector/src/main/res/drawable-xxhdpi/mis_unchecked_button.png b/multi-image-selector/src/main/res/drawable-xxhdpi/mis_unchecked_button.png new file mode 100644 index 0000000..71240b2 Binary files /dev/null and b/multi-image-selector/src/main/res/drawable-xxhdpi/mis_unchecked_button.png differ diff --git a/multi-image-selector/src/main/res/drawable/mis_camera_light_selector.xml b/multi-image-selector/src/main/res/drawable/mis_camera_light_selector.xml new file mode 100644 index 0000000..3ec3220 --- /dev/null +++ b/multi-image-selector/src/main/res/drawable/mis_camera_light_selector.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/multi-image-selector/src/main/res/drawable/mis_global_dark_selector.xml b/multi-image-selector/src/main/res/drawable/mis_global_dark_selector.xml new file mode 100644 index 0000000..cc265ef --- /dev/null +++ b/multi-image-selector/src/main/res/drawable/mis_global_dark_selector.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/multi-image-selector/src/main/res/drawable/mis_global_light_selector.xml b/multi-image-selector/src/main/res/drawable/mis_global_light_selector.xml new file mode 100644 index 0000000..3ec3220 --- /dev/null +++ b/multi-image-selector/src/main/res/drawable/mis_global_light_selector.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/multi-image-selector/src/main/res/layout-v14/mis_fragment_multi_image.xml b/multi-image-selector/src/main/res/layout-v14/mis_fragment_multi_image.xml index 7a72f21..c77f51d 100644 --- a/multi-image-selector/src/main/res/layout-v14/mis_fragment_multi_image.xml +++ b/multi-image-selector/src/main/res/layout-v14/mis_fragment_multi_image.xml @@ -1,47 +1,45 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:paddingBottom="?android:attr/actionBarSize" + android:verticalSpacing="@dimen/mis_space_size"/> + android:layout_height="?android:attr/actionBarSize" + android:layout_alignParentBottom="true" + android:background="#cc000000" + android:clickable="true">