From 15fb8dcc4f50b7a3e6130d19bda5a1c035878fcb Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Tue, 4 Nov 2025 13:37:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2list=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VisualNovel/app/build.gradle.kts | 6 + .../entity/request/ParamActorList.kt | 2 +- .../ui/main/actor/ActorsAdapter.kt | 13 +- .../DiffCornersTransformation.java | 89 +++++ .../res/layout/fragment_main_actor_item.xml | 316 +++++++++--------- VisualNovel/buildSrc/build/libs/buildSrc.jar | Bin 7702 -> 7770 bytes VisualNovel/buildSrc/src/main/java/Deps.kt | 4 + 7 files changed, 265 insertions(+), 165 deletions(-) create mode 100644 VisualNovel/app/src/main/java/com/remax/visualnovel/widget/glidetransformation/DiffCornersTransformation.java diff --git a/VisualNovel/app/build.gradle.kts b/VisualNovel/app/build.gradle.kts index dd20df0..6b3ad59 100644 --- a/VisualNovel/app/build.gradle.kts +++ b/VisualNovel/app/build.gradle.kts @@ -315,6 +315,12 @@ dependencies { implementation(Deps.BytePlusRTC) + // immersion bar + implementation(Deps.immersionbar) + implementation(Deps.immersionbarktx) + + + implementation(project(mapOf("path" to ":loadingstateview"))) implementation(project(mapOf("path" to ":loadingstateview-ktx"))) implementation(project(mapOf("path" to ":viewbinding-base"))) diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/request/ParamActorList.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/request/ParamActorList.kt index 6ca95d6..e42cc68 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/request/ParamActorList.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/request/ParamActorList.kt @@ -3,6 +3,6 @@ package com.remax.visualnovel.entity.request data class ParamActorList( var index: Int = 0, - var limit: Int = 2, + var limit: Int = 5, var tagIds: List = listOf(), ) diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorsAdapter.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorsAdapter.kt index 6783063..43a5842 100644 --- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorsAdapter.kt +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorsAdapter.kt @@ -1,6 +1,7 @@ package com.remax.visualnovel.ui.main.actor +import com.bumptech.glide.Glide import com.chad.library.adapter.base.module.LoadMoreModule import com.remax.visualnovel.R import com.remax.visualnovel.app.BaseBindingQuickAdapter @@ -8,6 +9,8 @@ import com.remax.visualnovel.databinding.FragmentMainActorItemBinding import com.remax.visualnovel.entity.response.ActorBean import com.remax.visualnovel.extension.glide.load import com.remax.visualnovel.ui.chat.ChatActivity +import com.remax.visualnovel.utils.ResUtil +import com.remax.visualnovel.widget.glidetransformation.DiffCornersTransformation class ActorsAdapter : BaseBindingQuickAdapter(FragmentMainActorItemBinding::inflate), LoadMoreModule { init { @@ -27,9 +30,15 @@ class ActorsAdapter : BaseBindingQuickAdapter().run { var imgUrl = item.coverImage - ivCharacter.load(if (imgUrl.contains(".png")) imgUrl.substring(0, imgUrl.indexOf(".png") + 4) else imgUrl) - ivFrom.setImageResource(R.mipmap.icon_search_on) + var validUrl = if (imgUrl.contains(".png")) imgUrl.substring(0, imgUrl.indexOf(".png") + 4) else imgUrl + var radius: Float = ResUtil.getPixelSize(R.dimen.dp_25).toFloat() + Glide.with(context) + .load(validUrl) + .transform(DiffCornersTransformation(0f, radius, radius, radius)) + .into(ivCharacter); + + ivFrom.setImageResource(R.mipmap.icon_search_on) tvScore.text = item.commonCount.toString() tvFrom.text = item.sourceId.toString() diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/glidetransformation/DiffCornersTransformation.java b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/glidetransformation/DiffCornersTransformation.java new file mode 100644 index 0000000..317da8c --- /dev/null +++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/glidetransformation/DiffCornersTransformation.java @@ -0,0 +1,89 @@ +package com.remax.visualnovel.widget.glidetransformation; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.RectF; + +import androidx.annotation.NonNull; + +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; + +import java.security.MessageDigest; + +import jp.wasabeef.glide.transformations.BitmapTransformation; + +public class DiffCornersTransformation extends BitmapTransformation { + + private float topLeft, topRight, bottomRight, bottomLeft; + + public DiffCornersTransformation(float topLeft, float topRight, + float bottomRight, float bottomLeft) { + this.topLeft = topLeft; + this.topRight = topRight; + this.bottomRight = bottomRight; + this.bottomLeft = bottomLeft; + } + + + @Override + protected Bitmap transform(@NonNull Context context, @NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) { + + Bitmap result = pool.get(outWidth, outHeight, Bitmap.Config.ARGB_8888); + if (result == null) { + result = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888); + } + + Canvas canvas = new Canvas(result); + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + + // 创建圆角路径 + Path path = new Path(); + float[] radii = new float[] { + topLeft, topLeft, topRight, topRight, + bottomRight, bottomRight, bottomLeft, bottomLeft + }; + + RectF rect = new RectF(0, 0, outWidth, outHeight); + path.addRoundRect(rect, radii, Path.Direction.CW); + + canvas.clipPath(path); + canvas.drawBitmap(toTransform, null, rect, paint); + + return result; + } + + @Override + public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) { + messageDigest.update(getCacheKey().getBytes()); + } + + private String getCacheKey() { + return "DifferentCornersTransformation-" + topLeft + "-" + topRight + "-" + bottomRight + "-" + bottomLeft; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + DiffCornersTransformation that = (DiffCornersTransformation) o; + + if (Float.compare(that.topLeft, topLeft) != 0) return false; + if (Float.compare(that.topRight, topRight) != 0) return false; + if (Float.compare(that.bottomRight, bottomRight) != 0) return false; + return Float.compare(that.bottomLeft, bottomLeft) == 0; + } + + @Override + public int hashCode() { + int result = (topLeft != +0.0f ? Float.floatToIntBits(topLeft) : 0); + result = 31 * result + (topRight != +0.0f ? Float.floatToIntBits(topRight) : 0); + result = 31 * result + (bottomRight != +0.0f ? Float.floatToIntBits(bottomRight) : 0); + result = 31 * result + (bottomLeft != +0.0f ? Float.floatToIntBits(bottomLeft) : 0); + result = 31 * result + getCacheKey().hashCode(); + return result; + } +} \ No newline at end of file diff --git a/VisualNovel/app/src/main/res/layout/fragment_main_actor_item.xml b/VisualNovel/app/src/main/res/layout/fragment_main_actor_item.xml index 540c925..12cc8b7 100644 --- a/VisualNovel/app/src/main/res/layout/fragment_main_actor_item.xml +++ b/VisualNovel/app/src/main/res/layout/fragment_main_actor_item.xml @@ -1,181 +1,173 @@ - + android:orientation="vertical" > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:padding="@dimen/dp_10" + > - + android:lineSpacingExtra="@dimen/dp_4" + android:textColor="#666666" + android:textSize="@dimen/sp_12" + android:maxLines="5" + android:text="description-1" + android:ellipsize="end" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginTop="@dimen/dp_5" + android:textColor="#999999" + android:textSize="@dimen/sp_10" + android:text="description-2" + android:textStyle="italic" /> - \ No newline at end of file + + diff --git a/VisualNovel/buildSrc/build/libs/buildSrc.jar b/VisualNovel/buildSrc/build/libs/buildSrc.jar index 8f6307da341082c18bac942f1a9350dcffe5906b..2a1d04d55a09b0d6eb48142677bb9f4cb35bbf62 100644 GIT binary patch delta 3875 zcmY+HXEYlM8^?2LOVx@RRiibcW>C9UZ4#^YC>5?*>((xjB52IEMue&wL5)aiRcKYD z_NEckb^zW3g9-uImM`SSap=lP%K`>#-EUWdaL%6x$r0AOVWT=D$%IY$KZ z-yozcF(Lk@`>);)nE5#Y0E83(zy<&SjD5o+z&^pSh=^>=?jn(A=IobJ zlE_J9)MaBrNA9y{++*Bh&$xHb(wyN|Aq8Cs^M1?mpYM-}b=!`g>oK|C*Orf&KHgj) zdC^C^QlLr7F1o%}?r_{UwbRh%nplPVY?;>%g(G!tbv^H?5Ye{5JpoNjU&(~YXr)=P zpmH++vntY}4IP9)McxaFIa%2@>^U4a+NKu5m? zVc1`@t*kGcc^_@4&=`?*-Ra{WE0dv>eZ3#)*O4(Z-`ikuM;~LhOgGNJ#cz5`?T;v> zIG;*a<)Oa2Krjs7_APw|57XbToS;W=H>+#f5#*2&ev!j=OMOypF(1;L zwy$v#yyjH>!#Oh?lmeA(GNNAAtQhw~uM{zq41T`Uk}F83%e@ z@R^}XeAD&wipkmMWgFy1vA;aT7SX35Pe^09x)30x=TSZXooQ=LfrYT`Xyt-Yn)uPe zt?xtZPQIr~QA=h+4I)=gC_I%T2(HDL+xY7tyQxEPmAMh{)EOshH(d4RG-sLC+H8lM zzT+(BYimdG@aXqCN%jSjQVzn_BCWq_dC;fky{K!HTkj2xIZn&vWovQA?kfG zm=xNGXUFA#3CgcYdp3H4zSgxE7_%Rr(}T(YWTEIW%<*NU*o50ALTEBX~29xNXVgiNL?-S8QIc07)*^$3_r-PK4o}|BtEQq{GmwC>& zU+eSr;|T68>ewvb7NhRcen&OcMzY=f>Xwdj0~wd!3gS3IB*-}UQje?S?mDHf^8G>V zXLTGNfgA+wi(eA@?xe!5{rO(EnA9XI7HYdH;UA8^Z8<=dD;e-UBgtyY=kt}EO6 zg6*@qr*yYsG@(Z(G-m6*d>ce=%+jRvY1=RcXV5k1*LZTJ*xmtZjN=n7uBNp}1U)g( zDmsmMH(QjQJfLh}&to$hkgQF2GIsn+s5Zl?BJu_Vagd^l$QTE$&|v^!r404={AAFcxT}^4gdej~9ku-V{f}?lxQuyISx- zJf`HsQG&G{)MvcA;tL@qFq6L$ZpWOyKHqCqADUscYizfD;a1>Po0>)7ZnSh-ZOHHp zrMr9qv6?kquF#)pI=w=aOl|H`DKz>yV#Gg|J>H(>d~=@oqmVPo=$5sgqs_|3ok&V? z#haB=$Q5M*= zf0DJc-+NC-t9@9Id+r{0VUF>d%PjdN&Neh}`z#>Z4rcCO=Eu;)w)D-j>lQGd`vuuS za-^~RTspgb7q5Q%gXK-0dTGFFRMob;dGk4LRt{g#?>WbGld+Dg^WedlhO(<1Ht z2o`fUHK?Swd~t;|xO6CZh4A{~#%jJXg+0f)xv?^&l&))Md0K`pao{PyLo^lyxJca@ z7s@QgyR`+PGjlC4tKHKBKIv|ub2w?y7`^BZU;XIS7HYeQsiGEbM@XRlQ?yW=>bUA) z$4r%~E=6r{>d)rG@H7xxL3tdg^XQO>w=$Lio`&2|5Q?BuUM4(={l>gun)#@x$m^Hcr= z6+b)XU)Da9#QWZehPw-2`l|Mcu^t@SYDvPHj*KP_aR$vFZ}NIYkyVyt=PEz9OoX0_ z*yGM|mBmY46XvoJEnu1gxx+#Y7kAVOsx*f0LjF%}(GO0mA?`Ycb{mA2-SK6Iz?f4H9?k@1%;IMLO zu+!98EPb-`%Jz6^Bkw6@(3(?0fnT(vy#`MV_x`qJf)+RxC`} zizPbDV10=*_0Zv{z*Gd-qY5e)6<7dnq+r#Ekp!?u1@vLmrk#gd4HUgO_1I(nH59!) zW$HmRM5}L3`FRlS(6}kA0gh>_V~k9z1rRA4%IX9nv*j4TE3P_Qq+g2b5` z=sD4Wg3SOsMg``AIX0#|J?3kmXHlC^z!+lWd$7n179kY5`S))Nv}g@9g{WEu?IlJw zgGHvW?va~#u*f79=y9hG+P*ba3l^EiDti#E&^g;vJH$vsbYE1UAzHM_Jon2|1cWBd zC&j?{_To}wzwj)b^X?4%w!LbQJ(jUzRv)6}K18_}BClF$qJ7qPc!drOn>R?$nCsac zcR)m1U*qp~aPf?tdL&U-CBSvI(m)8Bp`W-&evm5SzKB1e57o@ms`xZlB4lybfGkf= z#$F~L<(%EKU2WG)4l&=0x9gP4F9&1>HVdb7tgNeg1vA69%0+S2#~k=e;54Srm$)l< zCm0$+yPevIrha2vkS18MEyxqjU1 zMwL2HWl*{XFq?ep4QZMMPp3W1rm(0HUrc^Sk^)g2iX;eyr2D8iwm(4#25;&`o-2I( z7Qv>lW*+TId<}%Q$rhhR9+RcH^2Fzmc3)5z**eX<5e@it3))4t_;Rvm10HQov*Bad zq0T!By7X<7kKd@IRQf-oyXJK{NmrY_16G-PRdsQ0e0V<@eWE&i@|m@`#dk}=B` zZ|lA1K<$)d#IVI9%)NiU#;1cAxoq*d6MvO6 zqatM6PC2~>DEQ31C)2F&2fzj!2C>o~PSi;@+#gW3CL3ndWW3;VI_m5{Ol9!9Jzz)-_jF48%xjj?8GxFQM8T4qpmH&6gvJmT@A@%9L9a2$T`0hKAWuF0xc;{iv z|A}Va1EAGErrF#C>|^>j#PW`^{1fubg`@vvkFY-H|2t?Nr-ALsYKXt8S0RWh< Y0stKUZU4=xq^7)mk(-y`!v8G)1L5Ro82|tP delta 3767 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