From 60bb3b0eeb47246d609f34d0f43bdfeb729b3632 Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 22 Sep 2015 12:20:19 +0330 Subject: [PATCH 01/10] First commit Optimized, some new features, better structure. --- .idea/codeStyleSettings.xml | 576 ++++++++++++++++++ .idea/compiler.xml | 5 +- .idea/dictionaries/aessh.xml | 7 + .idea/encodings.xml | 7 +- .idea/gradle.xml | 7 +- .idea/misc.xml | 42 +- .idea/modules.xml | 3 +- .idea/runConfigurations.xml | 12 + .idea/scopes/scope_settings.xml | 5 - .idea/vcs.xml | 3 +- MultiImageSelector.iml | 10 +- app/app.iml | 30 +- app/build.gradle | 8 +- .../multiimageselector/ApplicationTest.java | 13 - app/src/main/AndroidManifest.xml | 17 +- .../multiimageselector/MainActivity.java | 76 ++- .../res/drawable-hdpi/ic_photo_camera.png | Bin 0 -> 572 bytes .../res/drawable-mdpi/ic_photo_camera.png | Bin 0 -> 385 bytes .../res/drawable-xxhdpi/ic_photo_camera.png | Bin 0 -> 1069 bytes .../res/drawable-xxxhdpi/ic_photo_camera.png | Bin 0 -> 1444 bytes app/src/main/res/layout/activity_main.xml | 88 +-- app/src/main/res/menu/menu_main.xml | 12 +- app/src/main/res/values-zh/strings.xml | 16 - build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- multi-image-selector/build.gradle | 13 +- multi-image-selector/multi-image-selector.iml | 20 +- .../multi_image_selector/ApplicationTest.java | 13 - .../src/main/AndroidManifest.xml | 6 +- .../MultiImageSelectorActivity.java | 189 +++--- .../MultiImageSelectorFragment.java | 497 ++++++++------- .../adapter/FolderAdapter.java | 130 ++-- .../adapter/ImageGridAdapter.java | 278 +++++---- .../multi_image_selector/bean/Folder.java | 8 +- .../multi_image_selector/bean/Image.java | 10 +- .../multi_image_selector/utils/Constants.java | 40 ++ .../multi_image_selector/utils/FileUtils.java | 26 +- .../multi_image_selector/utils/TimeUtils.java | 25 +- .../view/GestureImageView.java | 104 ++-- .../res/drawable-hdpi/ic_photo_camera.png | Bin 0 -> 572 bytes .../res/drawable-mdpi/ic_photo_camera.png | Bin 0 -> 385 bytes .../res/drawable-xhdpi/ic_photo_camera.png | Bin 0 -> 724 bytes .../src/main/res/drawable-xxhdpi/asy.png | Bin 4522 -> 0 bytes .../res/drawable-xxhdpi/ic_photo_camera.png | Bin 0 -> 1069 bytes .../res/drawable-xxxhdpi/ic_photo_camera.png | Bin 0 -> 1444 bytes .../res/layout-v14/fragment_multi_image.xml | 82 +-- .../src/main/res/layout/activity_default.xml | 13 +- .../res/layout/cmp_customer_actionbar.xml | 48 +- .../main/res/layout/fragment_multi_image.xml | 84 +-- .../src/main/res/layout/list_item_camera.xml | 19 +- .../src/main/res/layout/list_item_folder.xml | 77 +-- .../src/main/res/layout/list_item_image.xml | 26 +- .../src/main/res/values-zh/strings.xml | 7 - .../src/main/res/values/strings.xml | 9 + 54 files changed, 1652 insertions(+), 1015 deletions(-) create mode 100644 .idea/codeStyleSettings.xml create mode 100644 .idea/dictionaries/aessh.xml create mode 100644 .idea/runConfigurations.xml delete mode 100644 .idea/scopes/scope_settings.xml delete mode 100644 app/src/androidTest/java/me/nereo/multiimageselector/ApplicationTest.java create mode 100644 app/src/main/res/drawable-hdpi/ic_photo_camera.png create mode 100644 app/src/main/res/drawable-mdpi/ic_photo_camera.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_photo_camera.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_photo_camera.png delete mode 100644 app/src/main/res/values-zh/strings.xml delete mode 100644 multi-image-selector/src/androidTest/java/me/nereo/multi_image_selector/ApplicationTest.java create mode 100644 multi-image-selector/src/main/java/me/nereo/multi_image_selector/utils/Constants.java create mode 100644 multi-image-selector/src/main/res/drawable-hdpi/ic_photo_camera.png create mode 100644 multi-image-selector/src/main/res/drawable-mdpi/ic_photo_camera.png create mode 100644 multi-image-selector/src/main/res/drawable-xhdpi/ic_photo_camera.png delete mode 100644 multi-image-selector/src/main/res/drawable-xxhdpi/asy.png create mode 100644 multi-image-selector/src/main/res/drawable-xxhdpi/ic_photo_camera.png create mode 100644 multi-image-selector/src/main/res/drawable-xxxhdpi/ic_photo_camera.png delete mode 100644 multi-image-selector/src/main/res/values-zh/strings.xml diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml new file mode 100644 index 0000000..fef3e57 --- /dev/null +++ b/.idea/codeStyleSettings.xml @@ -0,0 +1,576 @@ + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 217af47..96cc43e 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,7 +1,6 @@ - - - + \ No newline at end of file diff --git a/.idea/dictionaries/aessh.xml b/.idea/dictionaries/aessh.xml new file mode 100644 index 0000000..ffb34e7 --- /dev/null +++ b/.idea/dictionaries/aessh.xml @@ -0,0 +1,7 @@ + + + + nereo + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml index e206d70..97626ba 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,5 +1,6 @@ - - - + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 85a6c64..a23e9c6 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -3,8 +3,10 @@ - - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9076de5..1a3eaff 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,8 +3,44 @@ - + + + + + + + + + + + + + + + - - + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 16aeed6..387d8bb 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -7,5 +7,4 @@ - - + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml deleted file mode 100644 index 922003b..0000000 --- a/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index def6a6a..6564d52 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -3,5 +3,4 @@ - - + \ No newline at end of file diff --git a/MultiImageSelector.iml b/MultiImageSelector.iml index 8935ebd..f4dae0c 100644 --- a/MultiImageSelector.iml +++ b/MultiImageSelector.iml @@ -1,19 +1,19 @@ - + - + - + - - + \ No newline at end of file diff --git a/app/app.iml b/app/app.iml index 46168ca..00745ac 100644 --- a/app/app.iml +++ b/app/app.iml @@ -1,5 +1,5 @@ - + @@ -13,8 +13,11 @@ - + @@ -33,13 +36,13 @@ - + - + @@ -68,6 +71,8 @@ + + @@ -83,13 +88,12 @@ - + - - - - + + + + - - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 5c156f5..176cf8f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 22 - buildToolsVersion "22.0.1" + compileSdkVersion 23 + buildToolsVersion '23.0.1' defaultConfig { applicationId "me.nereo.multiimageselector" minSdkVersion 12 - targetSdkVersion 22 + targetSdkVersion 23 versionCode 1 versionName "1.0" } @@ -21,6 +21,6 @@ android { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:appcompat-v7:22.0.0' + compile 'com.android.support:appcompat-v7:23.0.0' compile project(':multi-image-selector') } diff --git a/app/src/androidTest/java/me/nereo/multiimageselector/ApplicationTest.java b/app/src/androidTest/java/me/nereo/multiimageselector/ApplicationTest.java deleted file mode 100644 index e8fcd41..0000000 --- a/app/src/androidTest/java/me/nereo/multiimageselector/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package me.nereo.multiimageselector; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fdccbb1..1abc9a0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,17 +1,18 @@ - + + android:theme="@style/AppTheme"> + android:label="@string/app_name"> @@ -20,10 +21,8 @@ - - + android:name="me.nereo.multi_image_selector.MultiImageSelectorActivity" + android:configChanges="orientation|screenSize" /> diff --git a/app/src/main/java/me/nereo/multiimageselector/MainActivity.java b/app/src/main/java/me/nereo/multiimageselector/MainActivity.java index 2b7d23f..4ff98b4 100644 --- a/app/src/main/java/me/nereo/multiimageselector/MainActivity.java +++ b/app/src/main/java/me/nereo/multiimageselector/MainActivity.java @@ -1,33 +1,45 @@ package me.nereo.multiimageselector; +import java.util.ArrayList; + import android.content.Intent; -import android.support.v7.app.ActionBarActivity; import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; 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; +import me.nereo.multi_image_selector.utils.Constants; -public class MainActivity extends ActionBarActivity { +public class MainActivity extends AppCompatActivity { private static final int REQUEST_IMAGE = 2; - - private TextView mResultText; private RadioGroup mChoiceMode, mShowCamera; - private EditText mRequestNum; - + private EditText mRequestNum; + private TextView mResultText; private ArrayList mSelectPath; + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == REQUEST_IMAGE) { + if (resultCode == RESULT_OK) { + mSelectPath = data.getStringArrayListExtra(Constants.EXTRA_RESULT); + StringBuilder sb = new StringBuilder(); + for (String p : mSelectPath) { + sb.append(p); + sb.append("\n"); + } + mResultText.setText(sb.toString()); + } + } + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -41,9 +53,9 @@ protected void onCreate(Bundle savedInstanceState) { mChoiceMode.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup radioGroup, int checkedId) { - if(checkedId == R.id.multi){ + if (checkedId == R.id.multi) { mRequestNum.setEnabled(true); - }else{ + } else { mRequestNum.setEnabled(false); mRequestNum.setText(""); } @@ -54,31 +66,31 @@ public void onCheckedChanged(RadioGroup radioGroup, int checkedId) { @Override public void onClick(View view) { - int selectedMode = MultiImageSelectorActivity.MODE_MULTI; + int selectedMode; - if(mChoiceMode.getCheckedRadioButtonId() == R.id.single){ - selectedMode = MultiImageSelectorActivity.MODE_SINGLE; - }else{ - selectedMode = MultiImageSelectorActivity.MODE_MULTI; + if (mChoiceMode.getCheckedRadioButtonId() == R.id.single) { + selectedMode = Constants.MODE_SINGLE; + } else { + selectedMode = Constants.MODE_MULTI; } boolean showCamera = mShowCamera.getCheckedRadioButtonId() == R.id.show; int maxNum = 9; - if(!TextUtils.isEmpty(mRequestNum.getText())){ + if (! TextUtils.isEmpty(mRequestNum.getText())) { maxNum = Integer.valueOf(mRequestNum.getText().toString()); } Intent intent = new Intent(MainActivity.this, MultiImageSelectorActivity.class); // 是否显示拍摄图片 - intent.putExtra(MultiImageSelectorActivity.EXTRA_SHOW_CAMERA, showCamera); + intent.putExtra(Constants.EXTRA_SHOW_CAMERA, showCamera); // 最大可选择图片数量 - intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_COUNT, maxNum); + intent.putExtra(Constants.EXTRA_SELECT_COUNT, maxNum); // 选择模式 - intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_MODE, selectedMode); + intent.putExtra(Constants.EXTRA_SELECT_MODE, selectedMode); // 默认选择 - if(mSelectPath != null && mSelectPath.size()>0){ - intent.putExtra(MultiImageSelectorActivity.EXTRA_DEFAULT_SELECTED_LIST, mSelectPath); + if (mSelectPath != null && mSelectPath.size() > 0) { + intent.putExtra(Constants.EXTRA_DEFAULT_SELECTED_LIST, mSelectPath); } startActivityForResult(intent, REQUEST_IMAGE); @@ -94,22 +106,6 @@ public void onClick(View view) { });*/ } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if(requestCode == REQUEST_IMAGE){ - if(resultCode == RESULT_OK){ - mSelectPath = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT); - StringBuilder sb = new StringBuilder(); - for(String p: mSelectPath){ - sb.append(p); - sb.append("\n"); - } - mResultText.setText(sb.toString()); - } - } - } - @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. diff --git a/app/src/main/res/drawable-hdpi/ic_photo_camera.png b/app/src/main/res/drawable-hdpi/ic_photo_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..f86b9b2046cb0007e2750beb48f232239567f555 GIT binary patch literal 572 zcmV-C0>k}@P)RJaEi4oSA)t05C@CU}S}ArGK7f^S&mdTcpeTq~CM4iTlQc;a6zhP` z;1@RD&H`CqB?T?+E{on3cR%HLw(1mT-3g1Q?Ru~VJgbrLF$j%Yt zgYDxt+v9@S2xB`Ouq}kO&DLO3xWWs#>4-_fZH6b`oV_q1QYfoM)ttgV9M6L zupMKtT`$Zw2D96TIjEs5ycW8h+Je=QMFxHJMn4vi6Hg7msu=g(suQ^7h8+prS1Cg` zPB~#mO@j|$45Olm-%nyV;eu6ZRxzYelB?vRh`EN@-EqL`v{rE(d!mQvq_wN-!?HB1 zW8e4zjgZ%eWn?_9EYqyaSk#3%w697^*bOy~s|TymK`PzQeM<{9V5^Q2*R zKRpqMYU@~VM{C#Ysel4%9eDCW*$3#2q-gen*`u5*bfO~sAwW~uU@V8!-M>73Zy1BE zd11qNHiCM@px<{HNoT&EP_Qa^Zo%eND*tUL{e!00000< KMNUMnLSTZh&JBwI literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_photo_camera.png b/app/src/main/res/drawable-mdpi/ic_photo_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..a27ea59e8bf7fc5a063ded6747486fcfd1c8d892 GIT binary patch literal 385 zcmV-{0e=38P)3*||@>v$5w)2y& zHe{o(SM!GX80uA3JI?h9_n6~cbClpDpA;KKydz0(C`dqe2$7}<@>!rfd?-k@qOV*X zIVebJ(mwmI=AZ$4(-q>N9yp>1hH>!oY}qcsvy`*kSrAXZ`_NW9oqf3<4um;X=)xmMSaB8;1T f(~8dx^pBt|n4A>_YppH&00000NkvXXu0mjfVNj;8 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_photo_camera.png b/app/src/main/res/drawable-xxhdpi/ic_photo_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..831bee5051ce7251fde7926f82fdb66c4faf2315 GIT binary patch literal 1069 zcmV+|1k(G7P)mW2g4)jWAo3@m`xa6_+D1A7U# z^g<=D=WtWcQ~`Smcl8rpDu8w32i#TyZC-)}(28jsAr94aP6>SqEplKL_z2Y%MbIwT zBb-48oua`GScN87muNvzuz&^+;on*l1#5+FY8C^V)(&h!4D3idumdr$xOQOQ#lUow z0W)C#Ggu58n86SRXbjQS2F(^U2irssYLUsjLni9bi)|gj;uy#MlvPtDrPhQ_U~?!I zE(uFqSlvns*fH8|*Sk+}qB__r?nssLMN~8@47P|o=~aq+yi*ly5!sFwV6q*cc?h<8 z#ofw5HA3j75keLHl>DwmRRcRt^4ZFwz%Xw~$fp!FJ2=_xV%(JsBc6frBVil%l3MKY z>fYZGQX#N8j+X+2Q`(JjAKyh)z~Y>Ad<*MBwks&)r0j$mVB?&-wJvPE%(-imYJjnG z!mus-QO3Sn1+Yy{$grzM#>XfB!Fregzh@il3lseN{0FObC0swYc&YarEXMq==cT|R z%zZ!e7i@!>Jjrcmd}I0rw)_Q~aU9S7sNCWy;xE{c#Wo}jW}TD``wKQ;vF(-yvu>yl z8ZgZs#SyiFN7Z!+9&EUmTjl+#TDU)D67-xD*sN*^8mO~acSwO*tLX>+&lP)_b@^S} zSUU(F#%$RSGxjxVRM26@LmpOyt(TDNLPLfpUpbzz&@Sa8WR=@3y2Zg{cbw;I4gr-k}G)CxZ z%Y){3)7EFe44497=h|Tjwx=Iz2evN;Hl-a{SPZO1JFq6v^J7u1uvWwm#sxiSAoof! zl-W7T*q{ko3=i!dJ`G|`gNLw8?i_S8CU8JmLcP4TPm!=Gec$Jy&@f;I%zzm%17^Ss nm;p0j2F!pNFau`5Tphmvn3?{)hLWqN00000NkvXXu0mjf(0lE- literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_photo_camera.png b/app/src/main/res/drawable-xxxhdpi/ic_photo_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..bf209a76e788dcbee061060fdb215f48f1768d40 GIT binary patch literal 1444 zcmV;V1zY-wP)nSuGwd%wJQ zKh8V%-nu%GNF)-8L?V$$BobLHoCB54p)RTt*$?43=(K`kwgGw{%b?VfaxF} zfGYSf&|{e1&{8210jPuxfuB@uMA=S2^Z1zTao#B`*aql1x=EjS?!}BvfF`k>{Go80 zakYJ^Rh1U?s~_T=4{?kqpq)lM-}v&oX+*S(BcKOH=j*;bFB?4{@&mNr;QLV^*TV+a zgWLd37{Xz>fI-x0G#Nr_le_?3HMrgj{GT2qzj0#$)M@AzQs})0s> zF&Ut7t^W=_fSR@8uoW^u%gAW+y4e8AYSW4-rRy#>@&T05P7bHkHf=*MfNTLIx0qDY z$!_K!ac}1J9mNtEpszz%fF}V%jT2;m3fzYpLt4j1qQUAsHgX@VzA%J4Xfk_>{KFkU zm)5hL1W>EiyPH=;@mgpPii-y48{C5SYqhRh0wz99;T^5-Iy~bA2smKyJrceuEnshrNxd0$(`{3w zNgEE+m3@S>`(sQbpGI3KiRA5=B|OTQry{h4fae+MF~&TZWg2@(@$4hLdJ+I=wJthM zhUZKOD~lvzLS4CrcFC<|$r|($@9dUsrX z`cnwIDX;^S6bT>!B!C2v0I~^Cx)z#T^bV+!DnLG#DwV}yQODnR|-0p(J);C9Z> zlI?@30aWz2rhPMc+&7t;!B)T9M)alvP*0GJN6uQ0=WNieYmShw7M7%&tA}Fqqpi4Y z<>p64r@F`M_F2uUr!a)SLRg+J`awlSbqo7z-Cr}zJr1oXf + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:paddingBottom="@dimen/activity_vertical_margin" + android:paddingLeft="@dimen/activity_horizontal_margin" + android:paddingRight="@dimen/activity_horizontal_margin" + android:paddingTop="@dimen/activity_vertical_margin" + tools:context=".MainActivity"> + android:textSize="16sp" + android:textStyle="bold" /> + android:layout_height="wrap_content" + android:checkedButton="@+id/multi" + android:orientation="vertical"> + android:layout_height="wrap_content" + android:text="@string/mode_single" /> + + android:layout_height="wrap_content" + android:text="@string/mode_multi" /> - + + android:textSize="16sp" + android:textStyle="bold" /> + android:layout_height="wrap_content" + android:enabled="false" + android:hint="@string/hint_default_amount" + android:inputType="number" /> + android:textSize="16sp" + android:textStyle="bold" /> + android:layout_height="wrap_content" + android:checkedButton="@+id/show" + android:orientation="vertical"> + android:layout_height="wrap_content" + android:text="@string/enable" /> + + android:layout_height="wrap_content" + android:text="@string/disable" />