RoomEffectView中图片加载闪退问题修复
This commit is contained in:
@@ -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() {
|
||||
|
@@ -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)
|
||||
|
@@ -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) {
|
||||
|
@@ -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")
|
||||
);
|
||||
|
@@ -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)
|
||||
}
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user