坑位刷新逻辑优化(头饰闪烁问题)

This commit is contained in:
huangjian
2021-03-01 14:50:17 +08:00
parent 3c570accfc
commit a14c70aee5
3 changed files with 33 additions and 43 deletions

View File

@@ -1,13 +1,16 @@
package com.yizhuan.erban.avroom.adapter;
import android.content.Context;
import androidx.recyclerview.widget.RecyclerView;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.alibaba.security.biometrics.build.G;
import com.coorchice.library.utils.LogUtils;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
@@ -37,11 +40,10 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
private OnMicroItemClickListener onMicroItemClickListener;
protected Context context;
private int mTagHeight;
public BaseMicroViewAdapter(Context context) {
this.context = context;
mTagHeight = context.getResources().getDimensionPixelOffset(R.dimen.tag_height);
setHasStableIds(true);
}
public void setOnMicroItemClickListener(OnMicroItemClickListener onMicroItemClickListener) {
@@ -87,11 +89,6 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
CircleImageView ivAvatar;
ImageView ivHalo;
TextView tvNumber;
TextView tvCharmValue;
View viewCenterOfCharm;
View llCharmClick;
ImageView ivCharmLevelTag;
NormalMicroViewHolder(View itemView) {
@@ -126,7 +123,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
ivMuteImage.setVisibility(View.GONE);
ivAvatar.setVisibility(View.GONE);
tvNick.setVisibility(View.INVISIBLE);
if (ivCharmLevelTag !=null){
if (ivCharmLevelTag != null) {
ivCharmLevelTag.setVisibility(View.GONE);
}
}
@@ -136,18 +133,9 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
this.position = position;
RoomMicInfo roomMicInfo = info.mRoomMicInfo;
ChatRoomMember chatRoomMember = info.mChatRoomMember;
// 清除动画
ivHalo.setBackground(null);
ivHalo.clearAnimation();
// 清除头饰
ivHeadWear.setImageDrawable(null);
ivHeadWear.clearAnimation();
if (ivCharmLevelTag !=null){
if (ivCharmLevelTag != null) {
ivCharmLevelTag.setVisibility(View.GONE);
}
GlideApp.with(context).clear(ivHeadWear);
//设置一个tag用于解决第一次进房间空坑位显示头饰的问题
ivHeadWear.setTag(R.id.mic_item_head_wear, null);
if (roomMicInfo == null) {
ivUpImage.setVisibility(View.VISIBLE);
ivLockImage.setVisibility(View.GONE);
@@ -167,26 +155,27 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
if (!TextUtils.isEmpty(chatRoomMember.getAccount()) && Long.valueOf(chatRoomMember.getAccount()) > 0) {
ivUpImage.setVisibility(View.GONE);
ivAvatar.setVisibility(View.VISIBLE);
// tvNick.setText(StringUtil.removeBlanks(chatRoomMember.getNick()));
// tvNick.setTextColor(context.getResources().getColor(R.color.white));
// if (AvRoomDataManager.get().isOpenPKMode()) {
// ViewAdapter.setViewBackground(tvNick, R.color.black_transparent_20, 50, 0, 0);
// } else {
// int nickBgColor = context.getResources().getColor(
// info.gender == 1 ? R.color.color_male_16AEFD : R.color.color_female_FE3F77);
// ViewAdapter.setViewBackground(tvNick, nickBgColor, 50, 0, 0);
// }
setSelectText(position, chatRoomMember.getNick(), info.gender);
ImageLoadUtils.loadAvatar(BasicConfig.INSTANCE.getAppContext(), chatRoomMember.getAvatar(), ivAvatar);
// 加载贵族
updateNobleView(chatRoomMember);
} else {
ivHeadWear.setVisibility(View.GONE);
ivUpImage.setVisibility(View.VISIBLE);
ivAvatar.setVisibility(View.GONE);
ivCharmLevelTag.setVisibility(View.GONE);
setDefalutText(position);
}
} else {
LogUtils.d(position + "chatRoomMember==null");
// 清除头饰
ivHeadWear.setVisibility(View.GONE);
ivHeadWear.setImageDrawable(null);
GlideApp.with(context).clear(ivHeadWear);
ivHeadWear.setTag(R.id.mic_item_head_wear, null);
// 清除动画
ivHalo.setBackground(null);
ivHalo.clearAnimation();
//锁坑
ivMuteImage.setVisibility(roomMicInfo.isMicMute() ? View.VISIBLE : View.GONE);
if (roomMicInfo.isMicLock()) {
@@ -202,16 +191,11 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
}
}
protected void setDefalutText(int index) {
tvNick.setTextColor(context.getResources().getColor(R.color.white_transparent_30));
// ViewAdapter.setViewBackground(
// tvNick, context.getResources().getColor(R.color.white_transparent_12), 50, 0, 0);
// tvNick.setText(String.format(context.getString(R.string.number_mic_position), index + 1));
tvNick.setText("号麦位");
if (tvNumber != null) {
tvNumber.setBackgroundResource(R.drawable.icon_bg_number_default);
tvNumber.setTextColor(context.getResources().getColor(R.color.white_transparent_30));
@@ -225,10 +209,6 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
tvNick.setTextColor(context.getResources().getColor(R.color.white));
if (tvNumber != null) {
// tvNumber.setBackgroundResource(gender == 1 ? R.drawable.bg_number_male : R.drawable.bg_number_female);
// tvNumber.setTextColor(context.getResources().getColor(R.color.white));
// tvNumber.setText(String.valueOf(index + 1));
if (AvRoomDataManager.get().isOpenPKMode()) { // pk模式不加性别背景
tvNumber.setBackgroundResource(R.drawable.icon_bg_number_default);
tvNumber.setTextColor(context.getResources().getColor(R.color.white_transparent_30));
@@ -243,15 +223,21 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
private void updateNobleView(ChatRoomMember chatRoomMember) {
String nobleHeadWear = (String) NobleUtil.getResource(NobleResourceType.KEY_HEAD_WEAR, chatRoomMember);
String headWear=NobleUtil.getHeadResource(HeadWearInfo.EFFECT, chatRoomMember)!=null?NobleUtil.getHeadResource(HeadWearInfo.EFFECT, chatRoomMember):NobleUtil.getHeadResource(HeadWearInfo.PIC, chatRoomMember);
String headWear = NobleUtil.getHeadResource(HeadWearInfo.EFFECT, chatRoomMember) != null ? NobleUtil.getHeadResource(HeadWearInfo.EFFECT, chatRoomMember) : NobleUtil.getHeadResource(HeadWearInfo.PIC, chatRoomMember);
if (!TextUtils.isEmpty(headWear)) {
// 头饰
ivHeadWear.setVisibility(View.VISIBLE);
ivHeadWear.setTag(R.id.mic_item_head_wear, headWear);
NobleUtil.loadMicHeadWear(headWear, ivHeadWear, R.id.mic_item_head_wear, headWear);
//只有头饰发生改变才更新,防止闪烁
if (!headWear.equals(ivHeadWear.getTag(R.id.mic_item_head_wear))) {
ivHeadWear.setTag(R.id.mic_item_head_wear, headWear);
NobleUtil.loadMicHeadWear(headWear, ivHeadWear, R.id.mic_item_head_wear, headWear);
}
} else if (!TextUtils.isEmpty(nobleHeadWear)) {
// 头饰
ivHeadWear.setVisibility(View.VISIBLE);
NobleUtil.loadResource(nobleHeadWear, ivHeadWear);
} else {
ivHeadWear.setVisibility(View.GONE);
}
}
@@ -268,7 +254,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
} else if (v.getId() == R.id.tv_room_desc || v.getId() == R.id.tv_room_type
|| v.getId() == R.id.iv_room_can_edit) {
onMicroItemClickListener.onRoomSettingsClick();
}else if (v.getId() == R.id.iv_red_package) {
} else if (v.getId() == R.id.iv_red_package) {
if (CommonUtils.isFastDoubleClick(800)) return;
onMicroItemClickListener.onRedPackageClick(position, info.mChatRoomMember);
}
@@ -280,6 +266,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
}
public abstract void bindToRecyclerView(RecyclerView recyclerView);
public abstract void dispose();
@Override

View File

@@ -24,6 +24,7 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import com.coorchice.library.SuperTextView;
import com.coorchice.library.utils.LogUtils;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.yizhuan.erban.R;
import com.yizhuan.erban.common.widget.CircleImageView;
@@ -47,6 +48,8 @@ import com.yizhuan.xchat_android_core.user.bean.UserInfo;
import com.yizhuan.xchat_android_core.utils.ActivityUtil;
import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
import org.jetbrains.annotations.NotNull;
/**
* @author xiaoyu
* @date 2017/12/18
@@ -84,8 +87,9 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
}
@NotNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
public RecyclerView.ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) {
View item;
if (viewType == TYPE_BOSS) {
item = LayoutInflater.from(parent.getContext()).

View File

@@ -28,7 +28,6 @@
android:layout_height="@dimen/dp_room_normal_mic_radius"
android:layout_gravity="center"
android:visibility="gone"
tools:background="#FF0"
tools:visibility="visible" />