77 签约房开始webp动画,练歌房右侧麦上用户刷新。

This commit is contained in:
2025-12-19 11:27:42 +08:00
parent 3fde4df00f
commit 552e238254
4 changed files with 177 additions and 15 deletions

View File

@@ -1,11 +1,23 @@
package com.xscm.modulemain.dialog
import android.content.Context
import android.graphics.drawable.Drawable
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.vectordrawable.graphics.drawable.Animatable2Compat
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.engine.GlideException
import com.bumptech.glide.load.resource.bitmap.CenterInside
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.Target
import com.xscm.modulemain.R
import com.xscm.modulemain.databinding.DialogSignTypeBinding
import com.xscm.moduleutil.utils.ImageUtils
import com.xscm.moduleutil.widget.dialog.BaseDialog
class DialogSignType(context:Context) : BaseDialog<DialogSignTypeBinding>(context){
@@ -52,25 +64,84 @@ class DialogSignType(context:Context) : BaseDialog<DialogSignTypeBinding>(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<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any,
target: Target<Drawable>,
isFirstResource: Boolean
): Boolean {
return false
}
override fun onResourceReady(
resource: Drawable,
model: Any,
target: Target<Drawable>,
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)
}
}