diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/utils/ImageUtils.java b/BaseModule/src/main/java/com/xscm/moduleutil/utils/ImageUtils.java index 9d494399..70e33415 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/utils/ImageUtils.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/utils/ImageUtils.java @@ -26,13 +26,18 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; +import androidx.vectordrawable.graphics.drawable.Animatable2Compat; import com.blankj.utilcode.util.ConvertUtils; import com.blankj.utilcode.util.Utils; import com.bumptech.glide.Glide; +import com.bumptech.glide.integration.webp.decoder.WebpDrawable; +import com.bumptech.glide.integration.webp.decoder.WebpDrawableTransformation; import com.bumptech.glide.load.DataSource; +import com.bumptech.glide.load.Transformation; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.GlideException; +import com.bumptech.glide.load.resource.bitmap.CenterInside; import com.bumptech.glide.load.resource.gif.GifDrawable; import com.bumptech.glide.request.FutureTarget; import com.bumptech.glide.request.RequestListener; @@ -655,6 +660,54 @@ public class ImageUtils { } } + + public static void loadWebpOneStart(int webp_anim, ImageView mAnimView){ + + if (mAnimView == null) { + return; + } + // 1. 本地资源专属优化配置 + RequestOptions options = new RequestOptions() + // 强制限制解码尺寸为ImageView显示尺寸(核心优化) + .override(800, 800); // 本地图用原尺寸,或指定固定尺寸 + + //webp动图 + CenterInside transformation = new CenterInside(); + Glide.with(mAnimView) + .load(webp_anim)//不是本地资源就改为url即可 + .apply(options) + .optionalTransform(transformation) + .optionalTransform(WebpDrawable.class, new WebpDrawableTransformation(transformation)) + .addListener(new RequestListener() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { + return false; + } + + @Override + public boolean onResourceReady(Drawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { + WebpDrawable webpDrawable = (WebpDrawable) resource; + //需要设置为循环1次才会有onAnimationEnd回调 + webpDrawable.setLoopCount(1); + webpDrawable.registerAnimationCallback(new Animatable2Compat.AnimationCallback() { + @Override + public void onAnimationStart(Drawable drawable) { + super.onAnimationStart(drawable); + } + + @Override + public void onAnimationEnd(Drawable drawable) { + super.onAnimationEnd(drawable); + webpDrawable.unregisterAnimationCallback(this); + } + }); + + return false; + } + }) + .into(mAnimView); + } + public static void clearDiskCache(Context context){ Glide.get(context).clearDiskCache(); } diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomKtvFragment.java b/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomKtvFragment.java index cdc4681f..5bf1220d 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomKtvFragment.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomKtvFragment.java @@ -48,6 +48,7 @@ import com.xscm.moduleutil.widget.RoomKtvWheatView; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -69,7 +70,7 @@ public class RoomKtvFragment extends BaseMvpFragment adapter; - + private List mSongPitList = new ArrayList<>(); VolumeManager volumeManager; public RoomKtvFragment() { @@ -172,7 +173,6 @@ public class RoomKtvFragment extends BaseMvpFragment(R.layout.item_room_charm_rank) { @Override protected void convert(BaseViewHolder helper, RoomPitBean item) { @@ -338,6 +345,7 @@ public class RoomKtvFragment extends BaseMvpFragment(context){ @@ -52,25 +64,84 @@ class DialogSignType(context:Context) : BaseDialog(contex 0 ->{ mBinding.groupFail.visibility = View.GONE mBinding.ivStart.visibility = View.VISIBLE + loadWebpOneStart(R.drawable.iv_start, mBinding.ivStart) mBinding.ivSuccess.visibility = View.GONE } 1 ->{ mBinding.groupFail.visibility = View.GONE mBinding.ivStart.visibility = View.GONE mBinding.ivSuccess.visibility = View.VISIBLE + window?.decorView?.postDelayed({ + dismiss() + }, 1500) } 2 ->{ mBinding.groupFail.visibility = View.VISIBLE mBinding.ivStart.visibility = View.GONE mBinding.ivSuccess.visibility = View.GONE + + window?.decorView?.postDelayed({ + dismiss() + }, 1500) } } - window?.decorView?.postDelayed({ - dismiss() - }, 1500) + } + var webpDrawable:WebpDrawable? = null + fun loadWebpOneStart(webp_anim: Int, mAnimView: ImageView?) { + if (mAnimView == null) { + return + } + // 1. 本地资源专属优化配置 + val options = RequestOptions() // 强制限制解码尺寸为ImageView显示尺寸(核心优化) + .override(800, 800) // 本地图用原尺寸,或指定固定尺寸 + //webp动图 + val transformation = CenterInside() + Glide.with(mAnimView) + .load(webp_anim) //不是本地资源就改为url即可 + .apply(options) + .optionalTransform(transformation) + .optionalTransform(WebpDrawable::class.java, WebpDrawableTransformation(transformation)) + .addListener(object : RequestListener { + override fun onLoadFailed( + e: GlideException?, + model: Any, + target: Target, + isFirstResource: Boolean + ): Boolean { + return false + } + + override fun onResourceReady( + resource: Drawable, + model: Any, + target: Target, + dataSource: DataSource, + isFirstResource: Boolean + ): Boolean { + webpDrawable = resource as WebpDrawable + //需要设置为循环1次才会有onAnimationEnd回调 + webpDrawable?.loopCount = 1 + webpDrawable?.registerAnimationCallback(object : + Animatable2Compat.AnimationCallback() { + override fun onAnimationStart(drawable: Drawable) { + super.onAnimationStart(drawable) + } + + override fun onAnimationEnd(drawable: Drawable) { + super.onAnimationEnd(drawable) + webpDrawable?.unregisterAnimationCallback(this) + dismiss() + } + }) + + return false + } + }) + .into(mAnimView) + } } \ No newline at end of file diff --git a/MainModule/src/main/res/drawable/iv_start.webp b/MainModule/src/main/res/drawable/iv_start.webp new file mode 100644 index 00000000..5bc90bf7 Binary files /dev/null and b/MainModule/src/main/res/drawable/iv_start.webp differ