From 6256a65747441b8e8c7e79755c9a8f913f5c3116 Mon Sep 17 00:00:00 2001 From: luosc Date: Wed, 22 Mar 2023 09:22:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8androidX=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/samlss/broccoli/util/DisplayUtil.java | 277 ++++++++++++++++++ broccoli/src/main/res/values/colors.xml | 6 + build.gradle | 44 ++- gradle/wrapper/gradle-wrapper.jar | Bin 54329 -> 54413 bytes gradle/wrapper/gradle-wrapper.properties | 5 +- gradlew | 0 sample/build.gradle | 19 +- .../java/me/samlss/broccoli_demo/App.java | 24 +- .../broccoli_demo/DingDingSampleActivity.java | 4 +- .../LayoutAdvancedSampleActivity.java | 41 +-- .../LayoutSimpleSampleActivity.java | 4 +- .../me/samlss/broccoli_demo/MainActivity.java | 16 +- .../RecyclerViewSampleActivity.java | 34 ++- sample/src/main/res/layout/activity_main.xml | 34 +-- .../layout/activity_recyclerview_sample.xml | 4 +- .../res/layout/recyclerview_sample_item.xml | 4 +- 16 files changed, 421 insertions(+), 95 deletions(-) create mode 100644 broccoli/src/main/java/me/samlss/broccoli/util/DisplayUtil.java create mode 100644 broccoli/src/main/res/values/colors.xml mode change 100644 => 100755 gradlew diff --git a/broccoli/src/main/java/me/samlss/broccoli/util/DisplayUtil.java b/broccoli/src/main/java/me/samlss/broccoli/util/DisplayUtil.java new file mode 100644 index 0000000..d9a7ef2 --- /dev/null +++ b/broccoli/src/main/java/me/samlss/broccoli/util/DisplayUtil.java @@ -0,0 +1,277 @@ +package me.samlss.broccoli.util; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.Dialog; +import android.content.Context; +import android.util.Log; +import android.view.Display; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.widget.ListAdapter; +import android.widget.ListView; + +import java.lang.reflect.Field; + +/** + * + * 功能说明:页面布局控件常用的一些工具类 + * 日期: 2015-12-22 + * 作者: all developer + */ +@SuppressLint("NewApi") +public class DisplayUtil { + + /** + * 设置ListView 的Item高度 + * + * @param activity + * @param listView + * @param height + */ + public static void setListViewItemHeight(Activity activity, + ListView listView, int height) { + ListAdapter listAdapter = listView.getAdapter(); + if (listAdapter == null) { + return; + } + int itemNum = listAdapter.getCount(); + + for (int j = 0; j < itemNum; j++) { + View listItem = listAdapter.getView(j, null, listView); + LayoutParams params = listItem.getLayoutParams(); + params.height = height; + listItem.setLayoutParams(params); + } + } + + /** + * 得到屏幕的高度(通知栏除外) + * + * @param activity + * @return + */ + public static int getContentViewHeight(Activity activity) { + int screenHeight = DisplayUtil.getScreenHeight(activity); + return screenHeight - getStatusBarHeight(activity); + } + + /** + * + * 功能说明:获取传入的view的高度 + * 日期: 2015-12-22 + * 作者:advance + * @param view + * @return + */ + public static int getViewHeight(View view) { + + int w = View.MeasureSpec.makeMeasureSpec(0, + View.MeasureSpec.UNSPECIFIED); + int h = View.MeasureSpec.makeMeasureSpec(0, + View.MeasureSpec.UNSPECIFIED); + view.measure(w, h); + return view.getMeasuredHeight(); + } + + /** + * + * 功能说明:获取传入的view的宽度 + * 日期: 2015-12-22 + * 作者:advance + * @param view + * @return + */ + public static int getViewWidth(View view) { + int w = View.MeasureSpec.makeMeasureSpec(0, + View.MeasureSpec.UNSPECIFIED); + int h = View.MeasureSpec.makeMeasureSpec(0, + View.MeasureSpec.UNSPECIFIED); + view.measure(w, h); + return view.getMeasuredWidth(); + } + + /** + * 得到通知栏的高度 + * + * @param context + * @return + */ + public static int getStatusBarHeight(Context context) { + Class c = null; + Object obj = null; + Field field = null; + int x = 0, statusBarHeight = 0; + try { + c = Class.forName("com.android.internal.R$dimen"); + obj = c.newInstance(); + field = c.getField("status_bar_height"); + x = Integer.parseInt(field.get(obj).toString()); + statusBarHeight = context.getResources().getDimensionPixelSize(x); + } catch (Exception e1) { + Log.e("Exception", Log.getStackTraceString(e1)); + } + return statusBarHeight; + } + + /** + * 得到屏幕高度 + * + * @param activity + * @return + */ + public static int getScreenHeight(Activity activity) { + + return activity.getWindowManager().getDefaultDisplay().getHeight(); + } + + /** + * 得到屏幕宽度 + * + * @param activity + * @return + */ + public static int getScreenWight(Activity activity) { + + return activity.getWindowManager().getDefaultDisplay().getWidth(); + } + + /** + * + * @param activity + * @param view + * 要设置的控件 + * @param heightRatio + * 控件占屏幕高的比率 + * @param widthRatio + * 控件占屏幕宽的比率 + */ + public static void setViewHWLocation(Activity activity, View view, + float heightRatio, float widthRatio, float heightLocation, + float widthLocation) { + + int screenWidth = activity.getWindowManager().getDefaultDisplay() + .getWidth(); + int screenHeight = activity.getWindowManager().getDefaultDisplay() + .getHeight(); + LayoutParams lParams = view.getLayoutParams(); + LayoutParams layoutParams = view.getLayoutParams(); + layoutParams.width = (int) (screenWidth * widthRatio); + layoutParams.height = (int) (screenHeight * heightRatio); + view.setLayoutParams(lParams); + view.setX((float)(screenWidth * widthLocation - layoutParams.width / 2f)); + view.setY((float)(screenHeight * heightLocation - layoutParams.height / 2f)); + } + + /** + * + * 功能说明:以一定的比例设置传入的view的高度 + * 日期: 2015-12-22 + * 作者:advance + * @param activity + * @param view + * @param heightRatio 比例 + */ + public static void setViewHeight(Activity activity, View view, + float heightRatio) { + + int screenHeight = activity.getWindowManager().getDefaultDisplay() + .getHeight(); + LayoutParams lParams = view.getLayoutParams(); + LayoutParams layoutParams = view.getLayoutParams(); + layoutParams.height = (int) (screenHeight * heightRatio); + view.setLayoutParams(lParams); + } + + /** + * 注意:设置dialog控件宽高一定要放在dialog.show()之后! 设置dialog显示的大小 + * + * @param activity + * @param dialog + * 要设置对话框 + * @param heightRatio + 占屏幕高的比例 + * @param widthRatio + 占屏幕宽的比例 + */ + public static void setDialogHW(Activity activity, Dialog dialog, + float heightRatio, float widthRatio) { + WindowManager m = activity.getWindowManager(); + Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 + WindowManager.LayoutParams p = dialog.getWindow().getAttributes(); // 获取对话框当前的参数值 + p.height = (int) (d.getHeight() * heightRatio); + p.width = (int) (d.getWidth() * widthRatio); + dialog.onWindowAttributesChanged(p); + dialog.getWindow().setAttributes(p); + } + + /** + * 设置dialog的位置 + * + * @param activity + * @param dialog + * @param heightLocation + * 相对原来位置的偏移量 + * @param widthLocation + * 相对原来位置的偏移量 + */ + public static void setDialogLocation(Activity activity, Dialog dialog, + float heightLocation, float widthLocation) { + WindowManager m = activity.getWindowManager(); + Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 + WindowManager.LayoutParams p = dialog.getWindow().getAttributes(); // 获取对话框当前的参数值 + p.x = (int) (d.getWidth() * widthLocation); + p.y = (int) (d.getHeight() * heightLocation); + dialog.getWindow().setAttributes(p); + } + + /** + * 设置dialog的位置 + * + * @param activity + * @param dialog + * @param heightLocation + * 相对原来位置的偏移量 + * @param widthLocation + * 相对原来位置的偏移量 + */ + public static void context(Activity activity, Dialog dialog, + float heightLocation, float widthLocation) { + WindowManager m = activity.getWindowManager(); + Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 + WindowManager.LayoutParams p = dialog.getWindow().getAttributes(); // 获取对话框当前的参数值 + p.x = (int) (d.getWidth() * widthLocation); + p.y = (int) (d.getHeight() * heightLocation); + dialog.getWindow().setAttributes(p); + + } + + /** + * 根据手机的分辨率从 dp 的单位 转成为 px(像素) + */ + public static int dip2px(Context context, float dpValue) { + float density = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * density + 0.5f); + } + + /** + * 根据手机的分辨率从 px(像素) 的单位 转成为 dp + */ + public static int px2dip(Context context, float pxValue) { + float density = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / density + 0.5f); + } + + /** + * + * 功能说明:获取设备的密度 + * 日期: 2015-12-22 + * 作者:advance + * @param context + * @return + */ + public static float getDensity(Context context) { + return context.getResources().getDisplayMetrics().density; + } +} diff --git a/broccoli/src/main/res/values/colors.xml b/broccoli/src/main/res/values/colors.xml new file mode 100644 index 0000000..8f5065f --- /dev/null +++ b/broccoli/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #f6f6f6 + #99ffffff + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index a87d7c0..c8213e9 100644 --- a/build.gradle +++ b/build.gradle @@ -3,12 +3,40 @@ buildscript { repositories { + maven { url 'https://developer.huawei.com/repo/' + } + google() jcenter() + maven { url "https://maven.aliyun.com/repository/public" } + maven { url 'https://storage.flutter-io.cn/download.flutter.io' } + maven { + url 'http://maven.aliyun.com/nexus/content/repositories/releases/' + } + + maven { + url "https://artifact.bytedance.com/repository/byteX/" + } + + maven { + url 'https://mvnrepository.com/artifact/org.eweb4j/fel' + } + + maven { + url "https://mvn.mob.com/android" + } + + maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } + maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' } + maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' } + maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' } + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' + classpath 'com.android.tools.build:gradle:3.5.4' classpath 'com.novoda:bintray-release:0.8.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.30" + // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } @@ -16,9 +44,21 @@ buildscript { allprojects { repositories { - maven{url "https://jitpack.io"} + maven { url "http://mvn.mob.com/android" } + maven { url "https://jitpack.io" } + maven { url 'https://developer.huawei.com/repo/' } google() jcenter() + maven { + url 'http://maven.aliyun.com/nexus/content/repositories/releases/' + } + maven { + url "https://mvn.mob.com/android" + } + maven { + url "https://mvn.getui.com/nexus/content/repositories/releases/" + } + maven { url "https://maven.aliyun.com/repository/public" } } tasks.withType(Javadoc) { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f6b961fd5a86aa5fbfe90f707c3138408be7c718..1948b9074f1016d15d505d185bc3f73deb82d8c8 100644 GIT binary patch delta 7399 zcmY+JWmFVEyv3IV=@jV(>F!z@2@w$K7LZtALE5DjX{1>i=?)12X{2LeX}_~3Zr zS8+Z^CuOc*#vOS(9rx~{;vK=PN*oInvlWewm9q?HBbE;o_x;6zen+o_GVn=8O(eH- z0)EfmN&CUxAA=#~myMvmSzmnLDUQEToNE8Pge)u4hI*|3WS3HwwAbF|+Kkrxy8RW1 z??)%`HVm^w1eCuXP2E{E;f<)3hKM`Oseb8MPK9vsjC>Z*q5_X-j(mtvtlZhGDv)~% z#TB1X$q}_U<3&+j9?ZXp+bva%z-n;_E3-ABH+=ow9qj^ycH5G;~+ zWT)EPw2{$k@s&u(VIx%xn+kMNP@I;Yf$3!`5c#HlLKhh?*t7kx{Cz)1hh0&nD zfT^r%5#6%+to!O2&X`C#*_?EB3LDqIMw<9fooHoRymc(M$!ysO@>{4gXBiAr9nL9m zTcUM%7k|_i76U~z3=13;e;IQNZw+4YFt@aty-)wlJF_u0S^IALUh|0DxnBP7){Y*| zGV2TveLN+#GXU{Y)t$wyr-4kC+g|67!HDLwd7(MG*SmoO20!2CXYk`%YPZcFeTb&7SbGsyiRZ+&JzpftORRs>7bdt$pp4tZo;5o-ponrL!*VRI?y{APgqidMw%s?D zq%AxTlU(UV?r|^&hU}2c+_x$}E=Ijjdu)s8(X)GO1Hbl?*+d;@>W%c^=NbWqKY1yT zIMGPShAa%oxyX+Rv5qIgF0z(5`|TonPGiUQc~N7m8!h&AF>eooiL)Rj9wQiBs!P%NBkhXAI~+#_MG(sqJJ!D zAv#?B>&o&@kyBFG>RH67un37ampQ?&Y+(JJ?_2ly{hB&ljO~&~sV{A7+eQ_r`0YFh ziNlp8dV}vTvk~&b)>(_ za+HH<)=~rD4ld@hre7Fj7`YHy{y@F1$1D`9#zm5?BI1R!Fg@d}Ah*bYLZ=bzGN|#d>6Kl=gD#y07Lb2wx+fs1 ztF~who=cp0(U4pR+r-^a<;xeP+_mL_SPqoLY^7a$7KrE#eB!KHeywu%%s?kknex?= zKnM*#2KQoa5V>spdk2cab*d^_6X7s;^sTYzekuQF>@>IObfetv{fdf194^l^H{le7 z5#6h5lJlq&+bRMk62huwA%hUn5Ys!Z`u2u9=BOdtr4oTKnEBbIZ$E`{75~E8rni*3 za!VROb5@60DrBtg{13F#QS!|I4Pq4c;WQV%UrEaQad8t0nxg;;D|^lfS0+TxybqOViPItSXJr;vn?4w*Q{Dt7?-}+wCV!t)B-4^GLVlxA zclVHP$zWoE#V5u}3b_TFfmGRKwfHQalUhEfuw+tw983Ar6J!z{;3#usz`0a;>y}GB zpkOjqCU{^NZ>=U1hQ3FIUr8ZQU@^dS$wg?`?DP3MXngWVz-C~2s@TN7!Pj$!&&%;l z$`0#jw2b2{J-uA2@ICb9(OZleU5s&xz5IdKVt12Q*zjaLgH~eN9%^4 zO*+c%A1GdHpkq7(0I;zE0DuA@J(bKDhZF#);sgK~;cl4Z@K>TFFukotIdVL54%xef?Zw-b{eA9-Tt9m@_$D*scgxN@WYgzM*qBdeJnHfHg@>|8E{rCR zek^T(J(fAvGBX$m6F~#33~P(Z7lTaJ1?e|@EU{k)4I-8#zyny#3G8aZf?Y2_obpYl z@4zJ-wD=RsIb8dtoS@}#VIT-@&q<3rp(o4IRe$q}DuYF{uE+j~19?2*i5VZxYu+@( zxDXgoTu#}aVpjaVF?X92WNE;IJz-|S@iY3q-KbMTd8rsC7Up`^UNjjXaFF3Rs#64j>K)kbolbxvX|nnMKjPju|#qG3!3BlIETM_kl66m6rl0U zLCzI^>t=2LiVb!NNnI|t1-oFlDf?B zvnp33^R{yE&u_N_sj)QFhLDB1=4$BT?Lw?mI&K!s+o7#tuZ;Y-%BAiV%Sy{*H&b%PBJdR6*PhpX^#BFv|zig}INi&)8Qs2Rv+ z_dVFiI-mAx_C{ooXU`x!R1SdlFCG-7u z0FKm9E zNsAwG<`Cmk$}=(BNNJbIG=$38+aWI7hM0#rI30&wiE7wz0d!S?C7dipCbq}G*xl?_ zeVTaZADV@Q;wS@}r#NpNRs804rj)NfX)JzHu-m=Xi<7aUYdg1LHL!LC0Z=ze(jthUu{LF@;9DtP zQdBb44+toJ%CGgZwpjIm3O4icnI2wCFO#8uja{Y(@pIFNMI_Da&-5YTiDwOz*>1>} z8MkT__@%qnNu27-jyq^&Jarqs%P~~LMF6UNkRNT0dI>7cT3hN~;zsLbT|Ex#gF;Y*+jz#c={hPXn> zF@DDlNEl_7yHLvcsCTJjI6W1dpgO!S)9AA{q17p|R_!s%x~xca7Tu6Y%WEtx^2B@g z>UoyvyfN`)Ve6*$bpIQpGT3w7-%vE@=?KG7uyqNcgZA7W^)(4oa_*;N!Mtl8lo7&9 zxs$$Wbft>lS=z=))csA!s9I7m%U4NxAiL5#^ReblNhaGND>=ysBP9^obbZuw+vLt_e(*IUYmxTXZ9KP;4D zQIMv8OBRqfMY5+0+bz8iPQl!vN|9AXm3fkxf0-)0NPl^E<0v5e1y@%rK&v>w^UKTJ z(hgk9!n18?4dU+FBLM_XHen^rnswGKQBv(eZA=P?{i3)VoR8!gNvKH3rErfJpV%vZvK6P z2n+qxMu(BzMy;lrSS7A#k@iYL3bq$xbi@Tc?bPJT#Qj0*3fBx}$UUm@xT_X%b&hUb zi={6+?9VbV&uG@1Db~Xmve9ZJ58Z7G)6gW+Q`0vdn$` z%6eb*DVhuk>8jVI>B{RzS?4dk6b{X-VAK1|6K6kVt%gv@a1XC1Cn|Mnqh8cuB&}$~ zYak)zf|*WSmm%U$f8sJ2+~By~`&_Hj&W3>Ne~2_%3}~AE)at&{up#6M) zwSXt?l{P(_p?lMIUohdTo|zW0lkx?r7Z_I4Pr`4Ij4hFBEY>ja=Em=<^Dp)^;|yA% z=d49!{FNF-1tij*I)2R0h5GHw{AzFUy`GQ4G82lT|GxP<5jCeF5)mj>FJ4YY++i|9 zAR+w=2`W0VE^j9{4MpBCQDC*FgtMb^GI!KFecG@rM9n!3?)UOD)BA4-xitoBmnPkx z<@YRss#`u(ojmTm&U&{Au!0k9{l|>v$L;&S7c&-IffN`T*4Z5}X16!sn~R#Q7^^sJ z^_NyuTOjAkUCK*_Nrq>S@>`bYvs{0|U6nRKZau12SyYK1RKQJZ7d2f}fH|#EH(p#T zPI(P#nl0(8XRdb~IBqc7moPK+-IM*tWUFX*z6nwdvzpO-IC!Ap&@)F|cGgs3U7+sJ zNx`6_TSz#_Yu-MjBe%7L%CS+`V5|c+cLv^#e)(npORtI;Ve5O`U66}DNL)b->=GV_=P3(@@hZ)Bv9t@aS2GjE!rIUq{2j>lE(cJ~C0-$$50; zoM_dvrgz(~qVn(*r1`sk^wV_DWaJ>-u*-ZC9HFc1|Ert*LyuF#(jORUw$^W>+-jwa zF)7yD5n%}rpxT=zkQ~Hu`0?t+Sf9HzmI$jii(A12%}KJQo4{Af9l2Y7ouX>^ zCg1GyB!9AL!$bcA>TyFT<`|=DSsRuA01PxIz_sw-PQKJtmxQDt!H zGXeX5Usat>`w-pkL-(hdIsKS3 zI7yh0{!eW|yxkA^5o5^1vkD!M#{G-OyyF%>@X7}%`U@D@4TS|Xd8~{RoBU$Z`B+AT zt1Ko9rE32TlZ+~Jx)n8!75|+~@3!p21WzRxw4lNGyI3Uk8yfZEx?-%Ijx@4Z0G}+s zzMS-zz>fcd0*wQ^f$}N0N}5ivub?+s#y1@4yu5=>EETRiJO{x5_z~-Oj%?9=*;XPI z#lE+whYJ{>h*G0%M?ng^p8QP`eGehOgYvG`E%|8cQ!@sI@rdJ>Qp&60S?&b)95Shx zqr&MVWuj@_)i=l#?MY+&)mKz`Es!wQ75nlAr0%49a?sJ)wxH=pJ$E19R`=_MZO#fr zp-2!&60i{a4NK?>*pP-UYxtTD2qE4<8f#`j-ok2^{b={kYCQ<(O4#L(r786x+(Scf z%Hi2v?8{;=UvhHdYJ!x(vg)dW+zO}ml;B%v)3hSMI?!ny*iYWkUW|RcD-`bUEo&aWA z={j3NUUvD?&+#e!G0PJmU1OEM3-C_Rf)%+NT}d9~0zb>S7P?UT-vWJan9U5j7aABI z^4L~JMtsMqpify=8#V8kAOBvQvON*1-Nk^PgF$5;gb7zC08JNeezSS)?dq*xXi_!E zE1ubJP+Y@quQ0FowD*RqQ`!Vtfu^zdn5b-6kO9#|<~KA)XZR|`#dO%i%=3)5Fy1PZ zSz#pfN8{{u{N!fdo92~|?h~t1suYdPu4-Mb4zg-++OIT|bX%U{;^+p&LpcaQWAKmu zFi1edi`Svr43NXZ@u7F?tUI*fE-!)*UNhD(*Ah*z03=`Cfg#9?A@l`(PyU&J0Z0*# z4<&zh{+q|$UMVb%RNv5%boTk_QTKPA6^KNv7hAM2{7F(Hum5xwp{pyfQ#Q=MExMt z0-j`Hs-@Le^(yF>7On89cVJ3kvJ`nsyk3C@u|>0yow4AW-*RAvb_&b8bxBW(y{pb` zz1tO{JyNK_&rq~YE=%)~rTo73 zQ1&0(moUYYlRC&GLG2)IYkFYp!_Ay1o=6~8Q(SNUDboYGGoGm}uP-Tw^kA>%g|--= zc;WqzC&aYhOJU*Uunhc#;G6ia)!{txx39Y1fL5Xr`7P~F$&?nK9@B}G6iii9c+-I% zRlBUkt>>vNDju*FEb ztSa}!4PMNl;-KG-$nJg0qa5VdWo_JZI=Ru93Y5oON|J8ob$#-E-sb1|z`1$J`iG0A ze0#BLT6=dd`y6iREN$=YL&+lygLKJpB;|qD9mYT&h&%^+P%Pt(Ii}R(@whzj;zD%e zJ9>S9nusr6Jpk}p0}K0zl;;_|y+`}sw^lt-FD}Oa`O0D*RHglY<+i^Cxc_aRMB&|i zWPht~1n|;9F5slvKUuAY4<8;OhGPs-1K(-U*O-B@fO)meiy_4u)pZO7LAjSKC)}1RpoNkm0NbmhuvcR231%bFe z|M1eA8ou;5$@Tpwxsf1Xa=<@?1Ic~;ICwc6HEyJcmK{_&jGie;sSQJ{Y7T@ ze=U?4J~>4V9PEV0cY^+Hh2%6fS{7Vy+78VH-Zm|S@$cwQr^(U2!?9<$F)4fh^JxDA Da{n=i delta 7286 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9a4163a..ebc7d52 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Mon Mar 20 16:52:26 CST 2023 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/sample/build.gradle b/sample/build.gradle index 0c26237..f5b697f 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion 28 defaultConfig { applicationId "me.samlss.broccoli_demo" - minSdkVersion 14 + minSdkVersion 23 targetSdkVersion 28 versionCode 1 versionName "1.0" @@ -26,15 +26,16 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support:recyclerview-v7:28.0.0' - implementation 'com.android.support:cardview-v7:28.0.0' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + androidTestImplementation 'androidx.test:runner:1.1.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation project(':broccoli') - debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2' - releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2' +// debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2' +// releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2' + implementation 'com.squareup.leakcanary:leakcanary-android:2.6' implementation 'de.hdodenhof:circleimageview:2.2.0' + implementation('androidx.recyclerview:recyclerview:1.1.0') } diff --git a/sample/src/main/java/me/samlss/broccoli_demo/App.java b/sample/src/main/java/me/samlss/broccoli_demo/App.java index 395ec60..52b2429 100644 --- a/sample/src/main/java/me/samlss/broccoli_demo/App.java +++ b/sample/src/main/java/me/samlss/broccoli_demo/App.java @@ -2,8 +2,8 @@ import android.app.Application; -import com.squareup.leakcanary.LeakCanary; -import com.squareup.leakcanary.RefWatcher; +//import com.squareup.leakcanary.LeakCanary; +//import com.squareup.leakcanary.RefWatcher; /** * @author SamLeung @@ -12,20 +12,20 @@ * @description */ public class App extends Application { - public static RefWatcher sRefWatcher; +// public static RefWatcher sRefWatcher; @Override public void onCreate() { super.onCreate(); - if (LeakCanary.isInAnalyzerProcess(this)) { - // This process is dedicated to LeakCanary for heap analysis. - // You should not init your app in this process. - return; - } - sRefWatcher = LeakCanary.install(this); +// if (LeakCanary.isInAnalyzerProcess(this)) { +// // This process is dedicated to LeakCanary for heap analysis. +// // You should not init your app in this process. +// return; +// } +// sRefWatcher = LeakCanary.install(this); // Normal app init code... } - public static RefWatcher getRefWatcher(){ - return sRefWatcher; - } +// public static RefWatcher getRefWatcher(){ +// return sRefWatcher; +// } } diff --git a/sample/src/main/java/me/samlss/broccoli_demo/DingDingSampleActivity.java b/sample/src/main/java/me/samlss/broccoli_demo/DingDingSampleActivity.java index 451eb0d..e609f3f 100644 --- a/sample/src/main/java/me/samlss/broccoli_demo/DingDingSampleActivity.java +++ b/sample/src/main/java/me/samlss/broccoli_demo/DingDingSampleActivity.java @@ -3,9 +3,9 @@ import android.graphics.Color; import android.os.Bundle; import android.os.Handler; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import me.samlss.broccoli.Broccoli; import me.samlss.broccoli.PlaceholderParameter; diff --git a/sample/src/main/java/me/samlss/broccoli_demo/LayoutAdvancedSampleActivity.java b/sample/src/main/java/me/samlss/broccoli_demo/LayoutAdvancedSampleActivity.java index d5ce7af..4d4c9b6 100644 --- a/sample/src/main/java/me/samlss/broccoli_demo/LayoutAdvancedSampleActivity.java +++ b/sample/src/main/java/me/samlss/broccoli_demo/LayoutAdvancedSampleActivity.java @@ -4,8 +4,9 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import android.view.MotionEvent; import android.view.View; import android.view.animation.BounceInterpolator; @@ -58,25 +59,25 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { } private void initViews(){ - tvViewTimes = findViewById(R.id.tv_view_time); - tvCollectTimes = findViewById(R.id.tv_collect_time); - tvPrice = findViewById(R.id.tv_price); - ivClock = findViewById(R.id.iv_clock); - tvTime = findViewById(R.id.tv_time); - ivCalendar = findViewById(R.id.iv_calendar); - ivLocation = findViewById(R.id.iv_location); - tvLocation = findViewById(R.id.tv_location); - ivRightArrow = findViewById(R.id.iv_arrow_right); + tvViewTimes = (TextView) findViewById(R.id.tv_view_time); + tvCollectTimes = (TextView) findViewById(R.id.tv_collect_time); + tvPrice = (TextView) findViewById(R.id.tv_price); + ivClock = (ImageView) findViewById(R.id.iv_clock); + tvTime = (TextView) findViewById(R.id.tv_time); + ivCalendar = (ImageView) findViewById(R.id.iv_calendar); + ivLocation = (ImageView) findViewById(R.id.iv_location); + tvLocation = (TextView) findViewById(R.id.tv_location); + ivRightArrow = (ImageView) findViewById(R.id.iv_arrow_right); vLine = findViewById(R.id.view_line); - ivLogo = findViewById(R.id.iv_logo); - tvOrganizer = findViewById(R.id.tv_organizer_name); - tvOrganizerDescription = findViewById(R.id.tv_organizer_description); - tvFans = findViewById(R.id.tv_fans); - tvFansNumber = findViewById(R.id.tv_fans_number); - tvEvents = findViewById(R.id.tv_events); - tvEventsNumber = findViewById(R.id.tv_events_number); - tvFollow = findViewById(R.id.tv_follow); - tvStation = findViewById(R.id.tv_station); + ivLogo = (ImageView) findViewById(R.id.iv_logo); + tvOrganizer = (TextView) findViewById(R.id.tv_organizer_name); + tvOrganizerDescription = (TextView) findViewById(R.id.tv_organizer_description); + tvFans = (TextView) findViewById(R.id.tv_fans); + tvFansNumber = (TextView) findViewById(R.id.tv_fans_number); + tvEvents = (TextView) findViewById(R.id.tv_events); + tvEventsNumber = (TextView) findViewById(R.id.tv_events_number); + tvFollow = (TextView) findViewById(R.id.tv_follow); + tvStation = (TextView) findViewById(R.id.tv_station); findViewById(R.id.iv_retry).setOnTouchListener(new View.OnTouchListener() { @Override diff --git a/sample/src/main/java/me/samlss/broccoli_demo/LayoutSimpleSampleActivity.java b/sample/src/main/java/me/samlss/broccoli_demo/LayoutSimpleSampleActivity.java index 0f80717..2d57c9e 100644 --- a/sample/src/main/java/me/samlss/broccoli_demo/LayoutSimpleSampleActivity.java +++ b/sample/src/main/java/me/samlss/broccoli_demo/LayoutSimpleSampleActivity.java @@ -4,12 +4,12 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.View; import android.view.animation.BounceInterpolator; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import me.samlss.broccoli.Broccoli; diff --git a/sample/src/main/java/me/samlss/broccoli_demo/MainActivity.java b/sample/src/main/java/me/samlss/broccoli_demo/MainActivity.java index f66ca9e..b24f77d 100644 --- a/sample/src/main/java/me/samlss/broccoli_demo/MainActivity.java +++ b/sample/src/main/java/me/samlss/broccoli_demo/MainActivity.java @@ -2,27 +2,29 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; import android.view.View; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + public class MainActivity extends AppCompatActivity { @Override - protected void onCreate(Bundle savedInstanceState) { + protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } - public void startLayoutSample(View view) { + public void startLayoutSample(View view) { // 静态 startActivity(new Intent(this, LayoutSimpleSampleActivity.class)); } - public void startRecyclerViewSample(View view) { - startActivity(new Intent(this, RecyclerViewSampleActivity.class)); + public void startAdvancedLayoutSample(View view) { // 动画 + startActivity(new Intent(this, LayoutAdvancedSampleActivity.class)); } - public void startAdvancedLayoutSample(View view) { - startActivity(new Intent(this, LayoutAdvancedSampleActivity.class)); + public void startRecyclerViewSample(View view) { // 列表 + startActivity(new Intent(this, RecyclerViewSampleActivity.class)); } public void startDingDingSample(View view) { diff --git a/sample/src/main/java/me/samlss/broccoli_demo/RecyclerViewSampleActivity.java b/sample/src/main/java/me/samlss/broccoli_demo/RecyclerViewSampleActivity.java index 6d28b2b..830bc69 100644 --- a/sample/src/main/java/me/samlss/broccoli_demo/RecyclerViewSampleActivity.java +++ b/sample/src/main/java/me/samlss/broccoli_demo/RecyclerViewSampleActivity.java @@ -2,14 +2,8 @@ import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; -import android.view.animation.BounceInterpolator; import android.view.animation.LinearInterpolator; import android.widget.ImageView; import android.widget.TextView; @@ -23,6 +17,13 @@ import me.samlss.broccoli.PlaceholderParameter; import me.samlss.broccoli.BroccoliGradientDrawable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + + /** * @author SamLeung * @e-mail samlssplus@gmail.com @@ -104,7 +105,7 @@ private void initData(){ } private void initRecyclerView(){ - mRecyclerView = findViewById(R.id.recyclerview); + mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview); mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); myAdapter = new MyAdapter(); @@ -122,8 +123,9 @@ public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { } @Override - public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int i) { + public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, int position) { Broccoli broccoli = mViewPlaceholderManager.get(myViewHolder.itemView); + final int itemPos = position; if (broccoli == null){ broccoli = new Broccoli(); mViewPlaceholderManager.put(myViewHolder.itemView, broccoli); @@ -133,22 +135,22 @@ public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int broccoli.addPlaceholder(new PlaceholderParameter.Builder() .setView(myViewHolder.tvTitle) .setDrawable(new BroccoliGradientDrawable(Color.parseColor("#DDDDDD"), - Color.parseColor("#CCCCCC"), 0, 1000, new LinearInterpolator())) + Color.parseColor("#FF0000"), 0, 1000, new LinearInterpolator())) .build()); broccoli.addPlaceholder(new PlaceholderParameter.Builder() .setView(myViewHolder.imageView) .setDrawable(new BroccoliGradientDrawable(Color.parseColor("#DDDDDD"), - Color.parseColor("#CCCCCC"), 0, 1000, new LinearInterpolator())) + Color.parseColor("#FF0000"), 0, 1000, new LinearInterpolator())) .build()); broccoli.addPlaceholder(new PlaceholderParameter.Builder() .setView(myViewHolder.tvPrice) .setDrawable(new BroccoliGradientDrawable(Color.parseColor("#DDDDDD"), - Color.parseColor("#CCCCCC"), 0, 1000, new LinearInterpolator())) + Color.parseColor("#FF0000"), 0, 1000, new LinearInterpolator())) .build()); broccoli.addPlaceholder(new PlaceholderParameter.Builder() .setView(myViewHolder.tvDescription) .setDrawable(new BroccoliGradientDrawable(Color.parseColor("#DDDDDD"), - Color.parseColor("#CCCCCC"), 0, 1000, new LinearInterpolator())) + Color.parseColor("#FF0000"), 0, 1000, new LinearInterpolator())) .build()); broccoli.show(); @@ -167,10 +169,10 @@ public void run() { return; } - myViewHolder.imageView.setImageResource(mDataList.get(i).imageRes); - myViewHolder.tvPrice.setText("¥ "+String.valueOf(mDataList.get(i).price)); - myViewHolder.tvTitle.setText(mDataList.get(i).title); - myViewHolder.tvDescription.setText(mDataList.get(i).description); + myViewHolder.imageView.setImageResource(mDataList.get(itemPos).imageRes); + myViewHolder.tvPrice.setText("¥ "+String.valueOf(mDataList.get(itemPos).price)); + myViewHolder.tvTitle.setText(mDataList.get(itemPos).title); + myViewHolder.tvDescription.setText(mDataList.get(itemPos).description); } }; mTaskManager.put(myViewHolder.itemView, task); diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index f8b46e1..31b9a4c 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -7,51 +7,47 @@ tools:context=".MainActivity"> + android:layout_height="match_parent" + android:gravity="center" + android:orientation="vertical">