RoomEffectView中图片加载闪退问题修复

This commit is contained in:
huangjian
2022-07-19 15:15:22 +08:00
parent b6dc89a19d
commit 193c3dfe58
5 changed files with 77 additions and 56 deletions

View File

@@ -28,6 +28,7 @@ import com.opensource.svgaplayer.SVGAVideoEntity;
import com.tencent.qgame.animplayer.AnimView;
import com.yizhuan.erban.R;
import com.yizhuan.erban.common.widget.CircleImageView;
import com.yizhuan.erban.ui.utils.ImageLoadKt;
import com.yizhuan.erban.ui.utils.ImageLoadUtils;
import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil;
import com.yizhuan.xchat_android_core.bean.RoomQueueInfo;
@@ -214,7 +215,7 @@ public class GiftEffectView extends RelativeLayout implements SVGACallback {
if (!AvRoomDataManager.get().mIsNeedGiftEffect || AvRoomDataManager.get().isSelfGamePlaying()) {
return;
}
ImageLoadUtils.loadVAP(vapAnimView, url);
ImageLoadKt.loadAnim(vapAnimView,url);
}
private void deleteAnim() {

View File

@@ -15,47 +15,46 @@ import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import com.opensource.svgaplayer.SVGAParser.Companion.shareParser
import com.yizhuan.xchat_android_core.utils.subAndReplaceDot
import com.yizhuan.xchat_android_core.decoration.car.bean.CarInfo
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
import com.yizhuan.xchat_android_library.utils.ListUtils
import io.reactivex.android.schedulers.AndroidSchedulers
import com.yizhuan.xchat_android_core.im.custom.bean.DatingAllNotifyAttachment
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager
import com.yizhuan.erban.avroom.activity.AVRoomActivity
import com.yizhuan.erban.ui.utils.ImageLoadUtils
import com.yizhuan.xchat_android_core.im.custom.bean.RoomReceivedLuckyGiftAttachment
import com.yizhuan.xchat_android_core.im.custom.bean.RoomBoxPrizeAttachment
import com.netease.nimlib.sdk.chatroom.model.ChatRoomNotificationAttachment
import com.coorchice.library.SuperTextView
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
import com.netease.nimlib.sdk.chatroom.model.ChatRoomNotificationAttachment
import com.opensource.svgaplayer.*
import com.opensource.svgaplayer.SVGAParser.Companion.shareParser
import com.yizhuan.erban.R
import com.yizhuan.xchat_android_core.im.custom.bean.LevelUpNoticeAttachment
import com.yizhuan.xchat_android_core.room.bean.DatingNotifyInfo
import com.yizhuan.xchat_android_constants.XChatConstants
import com.yizhuan.erban.avroom.activity.AVRoomActivity
import com.yizhuan.erban.avroom.helper.AnimHelper
import com.yizhuan.erban.common.svga.SimpleSvgaCallback
import com.yizhuan.erban.databinding.LayoutRoomEffectBinding
import com.yizhuan.xchat_android_core.user.UserModel
import com.yizhuan.xchat_android_core.manager.IMNetEaseManager
import com.yizhuan.xchat_android_core.im.custom.bean.RoomPKAttachment
import com.yizhuan.xchat_android_core.im.custom.bean.SingleRoomRankAttachment
import com.yizhuan.xchat_android_core.im.custom.bean.RoomRankAttachment
import com.yizhuan.xchat_android_core.manager.RoomEvent
import com.yizhuan.xchat_android_core.im.custom.bean.DatingAttachment
import com.yizhuan.xchat_android_core.super_admin.util.SuperAdminUtil
import com.yizhuan.xchat_android_core.auth.AuthModel
import com.yizhuan.erban.ui.utils.ImageLoadUtils
import com.yizhuan.erban.ui.utils.isDestroyed
import com.yizhuan.erban.ui.utils.load
import com.yizhuan.erban.ui.utils.loadAnim
import com.yizhuan.erban.ui.widget.SimpleAnimListener
import com.yizhuan.erban.utils.SpannableBuilder
import com.yizhuan.xchat_android_constants.XChatConstants
import com.yizhuan.xchat_android_core.auth.AuthModel
import com.yizhuan.xchat_android_core.decoration.car.bean.CarInfo
import com.yizhuan.xchat_android_core.im.custom.bean.*
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager
import com.yizhuan.xchat_android_core.manager.IMNetEaseManager
import com.yizhuan.xchat_android_core.manager.RoomEvent
import com.yizhuan.xchat_android_core.room.bean.DatingNotifyInfo
import com.yizhuan.xchat_android_core.super_admin.util.SuperAdminUtil
import com.yizhuan.xchat_android_core.user.UserModel
import com.yizhuan.xchat_android_core.user.bean.UserInfo
import io.reactivex.*
import com.yizhuan.xchat_android_core.utils.subAndReplaceDot
import com.yizhuan.xchat_android_library.utils.ListUtils
import io.reactivex.Observable
import io.reactivex.ObservableEmitter
import io.reactivex.ObservableOnSubscribe
import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import java.net.MalformedURLException
import java.net.URL
import java.util.ArrayList
import java.util.concurrent.TimeUnit
/**
@@ -110,6 +109,7 @@ class RoomEffectView @JvmOverloads constructor(
private var isSvgaPlaying = false
private fun loopCarAnim() {
if (context.isDestroyed()) return
isSvgaPlaying = false
if (ListUtils.isListEmpty(mCarEffectList)) {
binding.roomCarSvga.visibility = GONE
@@ -884,7 +884,7 @@ class RoomEffectView @JvmOverloads constructor(
}
isSvgaPlaying = true
binding.vapAnimView.visibility = VISIBLE
ImageLoadUtils.loadVAP(binding.vapAnimView, viewUrl)
binding.vapAnimView.loadAnim(viewUrl)
}
/**
@@ -917,16 +917,8 @@ class RoomEffectView @JvmOverloads constructor(
(rootView.findViewById<View>(R.id.tv_title_right) as TextView).text =
roomPkBean.failTitle.subAndReplaceDot(7)
(rootView.findViewById<View>(R.id.tv_win_text) as TextView).text = roomPkBean.msg
ImageLoadUtils.loadImage(
context,
roomPkBean.winAvatar,
rootView.findViewById(R.id.iv_avatar_left)
)
ImageLoadUtils.loadImage(
context,
roomPkBean.failAvatar,
rootView.findViewById(R.id.iv_avatar_right)
)
rootView.findViewById<ImageView>(R.id.iv_avatar_left).load(roomPkBean.winAvatar)
rootView.findViewById<ImageView>(R.id.iv_avatar_right).load(roomPkBean.failAvatar)
rootView.findViewById<View>(R.id.tv_go_room).setOnClickListener {
AVRoomActivity.start(
context, roomPkBean.winUid
@@ -972,16 +964,8 @@ class RoomEffectView @JvmOverloads constructor(
(rootView.findViewById<View>(R.id.tv_title_right) as TextView).text =
roomPkBean.failNick.subAndReplaceDot(7)
(rootView.findViewById<View>(R.id.tv_win_text) as TextView).text = roomPkBean.msg
ImageLoadUtils.loadImage(
context,
roomPkBean.winAvatar,
rootView.findViewById(R.id.iv_avatar_left)
)
ImageLoadUtils.loadImage(
context,
roomPkBean.failAvatar,
rootView.findViewById(R.id.iv_avatar_right)
)
rootView.findViewById<ImageView>(R.id.iv_avatar_left).load(roomPkBean.winAvatar)
rootView.findViewById<ImageView>(R.id.iv_avatar_right).load(roomPkBean.failAvatar)
rootView.findViewById<View>(R.id.tv_go_room).setOnClickListener { v: View? ->
AVRoomActivity.start(
context, roomPkBean.winUid
@@ -1006,7 +990,7 @@ class RoomEffectView @JvmOverloads constructor(
(rootView.findViewById<View>(R.id.tv_nick) as TextView).text =
roomPkBean.nick.subAndReplaceDot(6)
(rootView.findViewById<View>(R.id.tv_desc) as TextView).text = roomPkBean.desc
ImageLoadUtils.loadImage(context, roomPkBean.avatar, rootView.findViewById(R.id.iv_avatar))
rootView.findViewById<ImageView>(R.id.iv_avatar).load(roomPkBean.avatar)
rootView.setOnClickListener { AVRoomActivity.start(context, roomPkBean.uid) }
binding.flSingleRoomRankNotify.addView(rootView)
animationLuckyGift = AnimationUtils.loadAnimation(mContext, R.anim.anim_box_notify)

View File

@@ -24,6 +24,7 @@ import com.yizhuan.erban.decoration.helper.DecorationDialogHelper;
import com.yizhuan.erban.decoration.helper.DecorationSaleType;
import com.yizhuan.erban.decoration.view.widgets.CarMagicIndicator;
import com.yizhuan.erban.ui.user.decorationsend.DecorationSendActivity;
import com.yizhuan.erban.ui.utils.ImageLoadKt;
import com.yizhuan.erban.ui.utils.ImageLoadUtils;
import com.yizhuan.erban.ui.webview.CommonWebViewActivity;
import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper;
@@ -448,7 +449,7 @@ public class DecorationStoreActivity extends BaseBindingActivity<ActivityDecorat
private void showVAPAnimation(String url) {
mBinding.vapAnimView.setLoop(99999);
mBinding.vapAnimView.setScaleType(ScaleType.FIT_CENTER);
ImageLoadUtils.loadVAP(mBinding.vapAnimView, url);
ImageLoadKt.loadAnim(mBinding.vapAnimView, url);
}
private void showSvgaAnimation(String effect) {

View File

@@ -8,7 +8,7 @@ import android.widget.RadioGroup;
import com.idlefish.flutterboost.FlutterBoost;
import com.yizhuan.erban.R;
import com.yizhuan.erban.base.BaseActivity;
import com.yizhuan.erban.ui.utils.ImageLoadUtils;
import com.yizhuan.erban.ui.utils.ImageLoadKt;
import com.yizhuan.xchat_android_core.DemoCache;
import com.yizhuan.xchat_android_core.Env;
import com.yizhuan.xchat_android_core.auth.AuthModel;
@@ -27,7 +27,7 @@ public class LabActivity extends BaseActivity {
setContentView(R.layout.activity_lab);
findViewById(R.id.rb_flutter_test).setOnClickListener(v -> FlutterBoost.instance().open("/", null));
findViewById(R.id.rb_vap_test).setOnClickListener(v ->
ImageLoadUtils.loadVAP(
ImageLoadKt.loadAnim(
findViewById(R.id.anim_vap_test),
"http://img.uat.lecheng163.com/mask_trunk_demo.mp4")
);

View File

@@ -4,6 +4,7 @@ import android.app.Activity
import android.app.Application
import android.content.Context
import android.content.ContextWrapper
import android.graphics.drawable.Drawable
import android.widget.ImageView
import androidx.annotation.Dimension
import androidx.annotation.Dimension.DP
@@ -12,6 +13,8 @@ import androidx.fragment.app.FragmentActivity
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.CircleCrop
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.bumptech.glide.util.Util
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.netease.nim.uikit.support.glide.GlideApp
@@ -19,7 +22,11 @@ import com.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGAImageView
import com.opensource.svgaplayer.SVGAParser
import com.opensource.svgaplayer.SVGAVideoEntity
import com.tencent.qgame.animplayer.AnimView
import com.tencent.qgame.animplayer.util.ScaleType
import com.yizhuan.erban.R
import com.yizhuan.xchat_android_core.utils.LogUtils
import java.io.File
import java.net.MalformedURLException
import java.net.URL
@@ -29,7 +36,7 @@ fun ImageView.load(
@DrawableRes defaultRes: Int = R.drawable.default_cover
) {
if ((getActivityContext(context) as? Activity)?.isDestroyed == true) return
if (context.isDestroyed()) return
if (url.isNullOrEmpty()) {
load(defaultRes)
@@ -52,7 +59,7 @@ fun ImageView.load(
@DrawableRes defaultRes: Int = R.drawable.default_cover
) {
if ((getActivityContext(context) as? Activity)?.isDestroyed == true) return
if (context.isDestroyed()) return
GlideApp.with(context).load(resId)
.dontAnimate()
@@ -68,7 +75,7 @@ fun ImageView.load(
fun ImageView.loadAvatar(url: String?) {
if ((getActivityContext(context) as? Activity)?.isDestroyed == true) return
if (context.isDestroyed()) return
GlideApp.with(context).load(url)
.dontAnimate()
@@ -78,6 +85,10 @@ fun ImageView.loadAvatar(url: String?) {
.into(this)
}
fun Context.isDestroyed(): Boolean {
return (getActivityContext(this) as? Activity)?.isDestroyed == true
}
fun getActivityContext(context: Context): Context {
if (Util.isOnMainThread() && context !is Application) {
@@ -131,4 +142,28 @@ fun SVGAImageView.loadFromAssets(name: String) {
} catch (e: MalformedURLException) {
}
}
fun AnimView.loadAnim(url: String) {
if (context.isDestroyed()) return
GlideApp.with(this)
.asFile()
.dontTransform()
.load(url)
.into(object : CustomTarget<File>() {
override fun onLoadCleared(placeholder: Drawable?) {}
override fun onLoadFailed(errorDrawable: Drawable?) {
super.onLoadFailed(errorDrawable)
LogUtils.d("onLoadFailed")
}
override fun onResourceReady(resource: File, transition: Transition<in File>?) {
this@loadAnim.setScaleType(ScaleType.CENTER_CROP)
this@loadAnim.startPlay(resource)
}
})
}