pdlivexp/live/src/main/java/com/yunbao/live/adapter/LiveChatAdapter.java
2023-12-15 17:17:18 +08:00

746 lines
34 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.yunbao.live.adapter;
import static com.yunbao.live.bean.LiveChatBean.AI_AUTOMATIC_SPEECH;
import static com.yunbao.live.bean.LiveChatBean.LUCKY_100_CHECK;
import static com.yunbao.live.bean.LiveChatBean.LUCKY_ANGEL;
import static com.yunbao.live.bean.LiveChatBean.RECOMMEND_CARD_NOTIFY;
import static com.yunbao.live.bean.LiveChatBean.STAR_CHALLENGE_UPGRADE_NOTIFY;
import static com.yunbao.live.bean.LiveChatBean.SYSTEM3_COLOR;
import static com.yunbao.live.bean.LiveChatBean.TYPE_TO_USER_MSG;
import static com.yunbao.live.bean.LiveChatBean.WISH_LIST_PROGRESS;
import static com.yunbao.live.bean.LiveChatBean.XYD_COMPLETE;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.makeramen.roundedimageview.RoundedImageView;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.OlineUserlistModel;
import com.yunbao.common.custom.VerticalImageSpan;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.interfaces.OnItemClickListener;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.utils.SpUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.weight.ClipPathCircleImage;
import com.yunbao.live.R;
import com.yunbao.live.activity.LiveAudienceActivity;
import com.yunbao.live.bean.LiveChatBean;
import com.yunbao.live.dialog.LiveHDDialogFragment;
import com.yunbao.live.event.LiveAudienceEvent;
import com.yunbao.live.utils.LiveTextRender;
import com.yunbao.live.utils.LoadDian9TuUtil;
import com.yunbao.live.views.LiveRoomViewHolder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* Created by cxf on 2018/10/10.
*/
public class LiveChatAdapter extends RecyclerView.Adapter {
public final static int MSG_HOUR_RANK_CHANGE = -100;//收到小时榜推送,发送一条弹幕
private Context mContext;
private List<LiveChatBean> mList;
private LayoutInflater mInflater;
private View.OnClickListener mOnClickListener;
private OnItemClickListener<LiveChatBean> mOnItemClickListener;
private RecyclerView mRecyclerView;
private LinearLayoutManager mLayoutManager;
private IMLoginModel model;
private int mRecyclerViewScrolledDy;
private int mPosition;
private boolean isBottom = false;
private int fountSize = 13;
private String isFans;
public LiveChatAdapter setFans(String fans) {
isFans = fans;
return this;
}
public LiveChatAdapter(Context context) {
mContext = context;
mList = new ArrayList<>();
mInflater = LayoutInflater.from(context);
model = IMLoginManager.get(context).getUserInfo();
mOnClickListener = v -> {
Object tag = v.getTag();
if (tag != null) {
LiveChatBean bean = (LiveChatBean) tag;
if (mOnItemClickListener != null) {
if (bean.getType() != LiveChatBean.SYSTEM) {
mOnItemClickListener.onItemClick(bean, 0);
}
}
}
};
if (SpUtil.getInstance().isExists("pd_live_room_fount_size")) {
try {
fountSize = Integer.parseInt(SpUtil.getStringValue("pd_live_room_fount_size"));
} catch (Exception ignored) {
}
}
}
public void setOnItemClickListener(OnItemClickListener<LiveChatBean> onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
@Override
public int getItemViewType(int position) {
return mList.get(position).getType();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == LiveChatBean.RED_PACK) {
return new RedPackVh(mInflater.inflate(R.layout.item_live_chat_red_pack, parent, false));
} else {
return new Vh(mInflater.inflate(R.layout.item_live_chat, parent, false));
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder vh, int position) {
if (vh instanceof Vh) {
((Vh) vh).setData(mList.get(position), position);
} else if (vh instanceof RedPackVh) {
((RedPackVh) vh).setData(mList.get(position));
}
}
@Override
public int getItemCount() {
return mList.size();
}
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
mRecyclerView = recyclerView;
mLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (isBottom && dy >= 0) return;
Log.i(TAG, "onScrolled: " + dy);
mRecyclerViewScrolledDy = dy;
isBottom = false;
}
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == 0 && isSlideToBottom(recyclerView)) {
// Log.i(TAG, "onScrollStateChanged: 到底部了");
mRecyclerViewScrolledDy = 0;
scrollToBottom();
isBottom = true;
} else if (newState == 0) {
// Log.i(TAG, "onScrollStateChanged: 不是底部");
isBottom = false;
}
}
});
}
public void switchFount(int fount) {
fountSize = fount;
SpUtil.setStringValue("pd_live_room_fount_size", fountSize + "");
notifyDataSetChanged();
}
class RedPackVh extends RecyclerView.ViewHolder {
LinearLayout mBg;
TextView mTextView;
public RedPackVh(View itemView) {
super(itemView);
mBg = (LinearLayout) itemView.findViewById(R.id.bg);
mTextView = (TextView) itemView.findViewById(R.id.text_txt);
}
void setData(LiveChatBean bean) {
mTextView.setText(bean.getContent());
mTextView.setTextSize(fountSize);
}
}
class Vh extends RecyclerView.ViewHolder {
LinearLayout mBg, view_follow, view_action_game, view_zg, xydComplete;
TextView mTextView, tv_chat_active_into, tv_chat_avtive_name, tv_zg_anchorname, textTxt2, automatic_chat;
RoundedImageView avatar;
View v_chat_active_close;
RecyclerView rv_chat_active;
ImageView img_zg_img, btnAttention, textLeave;
LinearLayoutCompat attentionLayout;
ClipPathCircleImage clipImage2;
public Vh(View itemView) {
super(itemView);
mBg = (LinearLayout) itemView.findViewById(R.id.bg);
mTextView = (TextView) itemView.findViewById(R.id.text_txt);
textTxt2 = (TextView) itemView.findViewById(R.id.text_txt2);
attentionLayout = (LinearLayoutCompat) itemView.findViewById(R.id.attention_layout);
clipImage2 = (ClipPathCircleImage) itemView.findViewById(R.id.clip_image2);
itemView.setOnClickListener(mOnClickListener);
view_follow = (LinearLayout) itemView.findViewById(R.id.view_follow);
avatar = (RoundedImageView) itemView.findViewById(R.id.avatar);
view_action_game = (LinearLayout) itemView.findViewById(R.id.view_action_game);
tv_chat_active_into = (TextView) itemView.findViewById(R.id.tv_chat_active_into);
tv_chat_avtive_name = (TextView) itemView.findViewById(R.id.tv_chat_avtive_name);
v_chat_active_close = (View) itemView.findViewById(R.id.v_chat_active_close);
rv_chat_active = (RecyclerView) itemView.findViewById(R.id.rv_chat_active);
view_zg = (LinearLayout) itemView.findViewById(R.id.view_zg);
xydComplete = (LinearLayout) itemView.findViewById(R.id.xyd_complete);
tv_zg_anchorname = (TextView) itemView.findViewById(R.id.tv_zg_anchorname);
automatic_chat = (TextView) itemView.findViewById(R.id.automatic_chat);
img_zg_img = (ImageView) itemView.findViewById(R.id.img_zg_img);
btnAttention = (ImageView) itemView.findViewById(R.id.btn_attention);
textLeave = (ImageView) itemView.findViewById(R.id.text_leave);
}
void setData(final LiveChatBean bean, int position) {
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (!TextUtils.isEmpty(bean.getId()) && !TextUtils.isEmpty(bean.getUserNiceName())) {
Bus.get().post(new LiveAudienceEvent()
.setType(LiveAudienceEvent.LiveAudienceType.INPUT_DIALOG)
.setOlineUserlistModel(new OlineUserlistModel().setId(bean.getId()).setUserNicename(bean.getUserNiceName())));
}
Log.e("eqwewqeweq", bean.toString());
return true;
}
});
mTextView.setTextSize(fountSize);
automatic_chat.setTextSize(fountSize);
itemView.setTag(bean);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, DpUtil.dp2px(80), 0);
params.gravity = Gravity.CENTER_VERTICAL;
mBg.setLayoutParams(params);
if (bean.getType() == 6) {//大作战活动
view_action_game.setVisibility(View.VISIBLE);
bean.setHeart(position);
params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, 80, 12);
mBg.setLayoutParams(params);
mTextView.setVisibility(View.GONE);
tv_chat_avtive_name.setText(bean.getUserNiceName());
String wordStore = bean.getMedalLevelImageUrl();
String[] word = wordStore.split(",");
List<String> wordsList = Arrays.asList(word);
Collections.reverse(wordsList);
ListAdapter listAdapter = new ListAdapter(mContext, wordsList);
GridLayoutManager gridLayoutManager = new GridLayoutManager(mContext, 10);
rv_chat_active.setLayoutManager(gridLayoutManager);
rv_chat_active.setAdapter(listAdapter);
//点击打开活动
tv_chat_active_into.setOnClickListener(v -> {
String url = CommonAppConfig.HOST + "/" + bean.getContent() + "?uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&anchorUid=" + LiveRoomViewHolder.mLiveUid + "&isZh=" + (WordUtil.isNewZh() ? "1" : 0);
Bundle bundle = new Bundle();
bundle.putString("url", url);
LiveHDDialogFragment fragment = new LiveHDDialogFragment();
fragment.setArguments(bundle);
fragment.show(((LiveAudienceActivity) mContext).getSupportFragmentManager(), "LiveHDDialogFragment");
});
v_chat_active_close.setOnClickListener(v -> removetItem(bean));
} else if (bean.getType() == -3 || bean.getType() == -4 || bean.getType() == -5) {//整蛊
if (bean.getBubble() != null && !bean.getBubble().equals("")) {
//加载.9图聊天气泡
new LoadDian9TuUtil().loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
} else {
// mBg.setBackgroundResource(R.drawable.bg_live_chat_item);
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
}
SpannableStringBuilder builder = new SpannableStringBuilder();
if (bean.getType() == -3) {
String str1 = WordUtil.isNewZh() ? "整蠱來了! " : "Pranks are coming";
String str2 = WordUtil.isNewZh() ? "" : "to";
builder.append(str1);
int length = builder.length();
builder.append(bean.getUserNiceName());
builder.setSpan(new ForegroundColorSpan(0xFF73FFFF), length, length + bean.getUserNiceName().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(str2);
int length2 = builder.length();
builder.append(bean.getAnchorName());
builder.setSpan(new ForegroundColorSpan(0xFF73FFFF), length2, length2 + bean.getAnchorName().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(WordUtil.isNewZh() ? "發出了 " + bean.getContent(): "Sent out " + bean.getContent());
mTextView.setText(builder);
} else if (bean.getType() == -4) {
String str1 = WordUtil.isNewZh() ? "成功拯救了 " : "Succeeded in saving";
String str2 = WordUtil.isNewZh() ? "免除了 " : "Exempt from";
int length = builder.length();
builder.append(bean.getMedal());
builder.setSpan(new ForegroundColorSpan(0xFF73FFFF), length, length + bean.getMedal().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(str1);
int length2 = builder.length();
builder.append(bean.getAnchorName());
builder.setSpan(new ForegroundColorSpan(0xFF73FFFF), length2, length2 + bean.getAnchorName().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(str2 + bean.getUserNiceName() + (WordUtil.isNewZh() ? "發出了 " : "Sent out ") + bean.getContent());
mTextView.setText(builder);
} else if (bean.getType() == -5) {
mBg.setBackground(null);
mTextView.setVisibility(View.GONE);
view_zg.setVisibility(View.VISIBLE);
tv_zg_anchorname.setText(Constants.nowAnchorName);
ImgLoader.display(mContext, bean.getPrankIcon(), img_zg_img);
}
} else if (bean.getType() == -6) {
if (bean.getBubble() != null && !bean.getBubble().equals("")) {
//加载.9图聊天气泡
new LoadDian9TuUtil().loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
} else {
// mBg.setBackgroundResource(R.drawable.bg_live_chat_item);
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
}
String str1 = WordUtil.isNewZh() ? "火力四射,魅力無限!感謝" : "Full of firepowerUnlimited charm!";
String str2 = WordUtil.isNewZh() ? "為本直播間加成熱度" : "Thank you for adding popularity to this live room";
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(str1);
int length = builder.length();
builder.append(bean.getUserNiceName());
builder.setSpan(new ForegroundColorSpan(0xffffff00), length, length + bean.getUserNiceName().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(str2);
int length2 = builder.length();
builder.append(bean.getHot_card());
builder.setSpan(new ForegroundColorSpan(0xffffff00), length2, length2 + bean.getHot_card().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.setText(builder);
} else if (bean.getType() == -7) {
if (bean.getBubble() != null && !bean.getBubble().equals("")) {
//加载.9图聊天气泡
new LoadDian9TuUtil().loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
} else {
// mBg.setBackgroundResource(R.drawable.bg_live_chat_item);
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
}
String str1 = WordUtil.isNewZh() ? "甜蜜不停,愛意不斷!恭喜" : "Sweetness never stops, love never stops!";
String str2 = WordUtil.isNewZh() ? "在甜蜜約會中搶購到了" : "who is on a sweet date for grabbing ";
String str3 = "!";
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(str1);
int length = builder.length();
builder.append(bean.getUserNiceName());
builder.setSpan(new ForegroundColorSpan(0xffffff00), length, length + bean.getUserNiceName().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(str2);
int length2 = builder.length();
builder.append(bean.getHot_num());
builder.append(str3);
builder.setSpan(new ForegroundColorSpan(0xffffff00), length2, length2 + bean.getHot_num().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.setText(builder);
} else if (bean.getType() == -10) {
mBg.setBackground(null);
} else if (bean.getType() == LiveChatBean.BLIND_BOX) {
Log.e("BLIND_BOX", bean.toString());
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
new LiveTextRender().blindBox(mContext, mTextView, bean);
} else if (bean.getType() == LiveChatBean.SYSTEM) {
boolean isContains = false;
for (LiveChatBean model : mList) {
if (!TextUtils.isEmpty(model.getContent()) && (model.getContent().contains("堅決維護青少年群體精神文明健康") || model.getContent().contains("click to register if you like. pdlive conducts"))) {
isContains = true;
}
}
if (isContains) {
mTextView.setTextColor(0xffffffff);
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
mTextView.setText(bean.getContent());
}
} else if (bean.getType() == LiveChatBean.SYSTEM2) {
mTextView.setTextColor(Color.parseColor("#ffffff"));
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
mTextView.setText(bean.getContent());
} else if (bean.getType() == TYPE_TO_USER_MSG) {
mTextView.setText(Html.fromHtml("<font color='#FBEABF'>@" + bean.getUserNiceName() + "</font> &nbsp;" + bean.getContent()));
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
}
// else if (bean.getType() == -1) {//自动消息,关注
// boolean isContains = false;
// for (LiveChatBean model : mList) {
// if (bean.getType() == -1) {
// isContains = true;
// }
// }
// if (isContains) {
// mBg.setBackground(null);
// mTextView.setVisibility(View.GONE);
// view_follow.setVisibility(View.VISIBLE);
// ImgLoader.display(mContext, bean.getId(), avatar);
// bean.setHeart(position);
// }
//
// }
else if (bean.getType() == -2) {//自动消息,点击发言
LinearLayout.LayoutParams params3 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params3.setMargins(0, 8, DpUtil.dp2px(80), 8);
params3.gravity = Gravity.CENTER_VERTICAL;
mBg.setLayoutParams(params3);
mBg.setBackground(null);
mTextView.setVisibility(View.GONE);
bean.setHeart(position);
ImgLoader.display(mContext, bean.getId(), clipImage2);
attentionLayout.setVisibility(View.VISIBLE);
if (TextUtils.isEmpty(isFans)) {
btnAttention.setVisibility(bean.isAttention() ? View.GONE : View.VISIBLE);
} else {
btnAttention.setVisibility(TextUtils.equals(isFans, "1") ? View.GONE : View.VISIBLE);
}
// btnAttention.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// LiveRoomViewHolder.follow();
// btnAttention.setVisibility(View.GONE);
// }
// });
} else if (bean.getType() == MSG_HOUR_RANK_CHANGE) {
mBg.setBackgroundResource(R.drawable.bg_chat_automatic_item);
mTextView.setText(bean.getContent());
bean.setHeart(position);
} else if (bean.getType() == RECOMMEND_CARD_NOTIFY) {
//加载.9图聊天气泡
new LoadDian9TuUtil().loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
new LiveTextRender().recommendCardNotify(mContext, mTextView, bean);
} else if (bean.getType() == WISH_LIST_PROGRESS) {
//加载.9图聊天气泡
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
xydComplete.setVisibility(View.VISIBLE);
new LiveTextRender().getLiveLevelImage(mContext, bean.getLevel(), false, new ImgLoader.DrawableCallback() {
@Override
public void onLoadSuccess(Drawable drawable) {
textTxt2.setText(userNicenamehighlight(bean.getContent(), bean.getAtUserName(), bean.getUserNiceName(), drawable));
}
@Override
public void onLoadFailed() {
}
});
mTextView.setVisibility(View.GONE);
textLeave.setVisibility(View.GONE);
} else if (bean.getType() == XYD_COMPLETE) {
//加载.9图聊天气泡
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
xydComplete.setVisibility(View.VISIBLE);
new LiveTextRender().getLiveLevelImage(mContext, bean.getLevel(), false, new ImgLoader.DrawableCallback() {
@Override
public void onLoadSuccess(Drawable drawable) {
textTxt2.setText(userNicenamehighlight(bean.getContent(), bean.getAtUserName(), bean.getUserNiceName(), drawable));
}
@Override
public void onLoadFailed() {
}
});
mTextView.setVisibility(View.GONE);
textLeave.setVisibility(View.GONE);
} else if (bean.getType() == AI_AUTOMATIC_SPEECH) {
//加载.9图聊天气泡
new LoadDian9TuUtil().loadDian9Tu(mContext, mBg, bean.getAiAutomaticSpeechModel().getSystemBubble(), 1);
new LiveTextRender().aiAutomaticSpeech(mContext, mTextView, bean.getAiAutomaticSpeechModel());
} else if (bean.getType() == STAR_CHALLENGE_UPGRADE_NOTIFY) {
//加载.9图聊天气泡
if (!TextUtils.isEmpty(bean.getMsgModel().getSystemBubble())) {
new LoadDian9TuUtil().loadDian9Tu(mContext, mBg, bean.getMsgModel().getSystemBubble(), 1);
new LiveTextRender().starChallengeUpgradeNotify(mContext, mTextView, bean.getMsgModel());
}
} else if (bean.getType() == LUCKY_ANGEL) {
if (!TextUtils.isEmpty(bean.getMsgModel().getSystem_bubble())) {
bean.setId(bean.getMsgModel().getUserId());
itemView.setTag(bean);
new LoadDian9TuUtil().loadDian9Tu(mContext, mBg, bean.getMsgModel().getSystem_bubble(), 1);
new LiveTextRender().luckyAngel(mContext, mTextView, bean.getMsgModel());
}
} else if (bean.getType() == LUCKY_100_CHECK) {
if (!TextUtils.isEmpty(bean.getMsgModel().getSystem_bubble())) {
bean.setId(bean.getMsgModel().getUserId());
itemView.setTag(bean);
new LoadDian9TuUtil().loadDian9Tu(mContext, mBg, bean.getMsgModel().getSystem_bubble(), 1);
new LiveTextRender().lucky100(mContext, mTextView, bean.getMsgModel());
}
} else if (bean.getType() == SYSTEM3_COLOR) {
mTextView.setText(Html.fromHtml(bean.getContent()));
if (!StringUtil.isEmpty(bean.getBubble())) {
new LoadDian9TuUtil().loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
}
} else {
if (bean.getBubble() != null && !bean.getBubble().equals("")) {
//加载.9图聊天气泡
new LoadDian9TuUtil().loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
} else {
// mBg.setBackgroundResource(R.drawable.bg_live_chat_item);
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
}
if (bean.getType() == LiveChatBean.ENTER_ROOM || bean.getType() == LiveChatBean.LIGHT) {
mTextView.setTextColor(0xffc8c8c8);
} else {
mTextView.setTextColor(0xffffffff);
}
new LiveTextRender().render(mContext, mTextView, bean);
}
Animation animation = AnimationUtils.loadAnimation(itemView.getContext(), R.anim.live_chat_msg_in);
itemView.startAnimation(animation);
}
}
@SuppressLint("NotifyDataSetChanged")
public synchronized void insertItem(LiveChatBean bean) {
if (bean == null) {
return;
}
if (bean.getType() == LiveChatBean.TYPE_TO_USER_MSG
&& !CommonAppConfig.getInstance().getUid().equals(bean.getAtUserID())) {
return;
}
// Log.i(TAG, "insertItem: " + bean.getContent()+" size = "+(mList.size()+1));
int size = mList.size();
//设置最大展示99条消息
if (size >= 100 && (isBottom || mRecyclerViewScrolledDy == 0)) {
mList.subList(0, 50).clear();
notifyItemRangeRemoved(0, 50);
}
mList.add(bean);
if (getItemCount() == 1) {
notifyDataSetChanged();
} else {
notifyItemInserted(getItemCount());
}
// size = mList.size();
if (isBottom || mRecyclerViewScrolledDy == 0) {
scrollToBottom();
} else {
Bus.get().post(new LiveAudienceEvent()
.setType(LiveAudienceEvent.LiveAudienceType.NEW_MESSAGE_REMINDER));
if (bean.getType() != LiveChatBean.TYPE_TO_USER_MSG &&
bean.getAtUserID() != null
&& bean.getAtUserID().contains(String.valueOf(model.getId()))) {
Bus.get().post(new LiveAudienceEvent()
.setType(LiveAudienceEvent.LiveAudienceType.AT_MESSAGE));
mPosition = size;
}
}
}
private void scrollToBottom(final RecyclerView recyclerView) {
// scroll to last item to get the view of last item
final LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
final int lastItemPosition = getItemCount() - 1;
recyclerView.post(new Runnable() {
@Override
public void run() {
layoutManager.scrollToPositionWithOffset(lastItemPosition, Integer.MIN_VALUE);
}
});
}
String TAG = "聊天测试";
/**
* 判断是否滚到底部
*
* @param recyclerView
* @return
*/
public boolean isSlideToBottom(RecyclerView recyclerView) {
if (recyclerView == null) return false;
if (recyclerView.computeVerticalScrollExtent() + recyclerView.computeVerticalScrollOffset() >= recyclerView.computeVerticalScrollRange())
return true;
return false;
}
public void removetItem(LiveChatBean bean) {
if (bean == null) {
return;
}
mList.remove(bean.getHeart());
notifyItemRemoved(bean.getHeart());
notifyItemRangeChanged(bean.getHeart(), getItemCount());
}
public void scrollToBottom() {
if (mList.size() > 0) {
mRecyclerView.smoothScrollToPosition(getItemCount());
}
mRecyclerViewScrolledDy = 0;
}
public void scrollToAt() {
if (mList.size() > 0) {
mRecyclerView.smoothScrollToPosition(mPosition);
}
}
public void clear() {
if (mList != null) {
mList.clear();
}
notifyDataSetChanged();
}
public class ListAdapter extends
RecyclerView.Adapter<ListAdapter.ViewHolder> {
private LayoutInflater mInflater;
private List<String> mDatas;
/**
* 是否可选
*/
public ListAdapter(Context context, List<String> datats) {
mInflater = LayoutInflater.from(context);
mDatas = datats;
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView ico;
public ViewHolder(View arg0) {
super(arg0);
ico = (ImageView) arg0.findViewById(R.id.ico);
}
}
@Override
public int getItemCount() {
return mDatas.size();
}
/**
* 创建ViewHolder
*/
@Override
public ListAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = mInflater.inflate(R.layout.item_chat_active,
viewGroup, false);
ListAdapter.ViewHolder viewHolder = new ListAdapter.ViewHolder(view);
return viewHolder;
}
/**
* 设置值
*/
@Override
public void onBindViewHolder(final ListAdapter.ViewHolder viewHolder, @SuppressLint("RecyclerView") final int position) {
int img = 0;
if ("1".equals(mDatas.get(position))) {
img = R.mipmap.monster_1;
} else if ("2".equals(mDatas.get(position))) {
img = R.mipmap.monster_2;
} else if ("3".equals(mDatas.get(position))) {
img = R.mipmap.monster_3;
} else if ("4".equals(mDatas.get(position))) {
img = R.mipmap.monster_4;
} else if ("5".equals(mDatas.get(position))) {
img = R.mipmap.monster_5;
} else if ("6".equals(mDatas.get(position))) {
img = R.mipmap.monster_6;
} else if ("7".equals(mDatas.get(position))) {
img = R.mipmap.monster_7;
} else if ("8".equals(mDatas.get(position))) {
img = R.mipmap.monster_8;
}
if (img != 0) {
viewHolder.ico.setBackground(mContext.getResources().getDrawable(img));
}
}
}
private Spanned userNicenamehighlight(String context, String keyword, String keyword2, Drawable levelDrawable) {
// String contextHtml = "";
// String keywordHtml2;
// String keywordHtml;
// if (TextUtils.isEmpty(keyword) || TextUtils.isEmpty(keyword2)) {
// keywordHtml2 = TextUtils.isEmpty(keyword) ? "1" : keyword;
// keywordHtml = TextUtils.isEmpty(keyword) ? "1" : keyword;
// } else {
// keywordHtml2 = "</font><font color='#4BFFD4'size='42px'>" + keyword + "</font><font color='#ffffff'size='42px'>";
// keywordHtml = "</font><font color='#4BFFD4'size='42px'>" + keyword2 + "</font><font color='#ffffff'size='42px'>";
// }
//
// contextHtml = "<font color='#ffffff'size='42px'>" + context + "</font>";
// contextHtml = contextHtml.replace(keyword, keywordHtml2).replace(keyword2, keywordHtml);
SpannableStringBuilder builder = new SpannableStringBuilder();
int index = 0;
if (levelDrawable != null) {
builder.append(" ");
levelDrawable.setBounds(0, 0, DpUtil.dp2px(18), DpUtil.dp2px(18));
builder.setSpan(new VerticalImageSpan(levelDrawable), index, index + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
index = builder.length();
}
builder.append(context);
builder.setSpan(new ForegroundColorSpan(Color.parseColor("#4BFFD4")), index + context.indexOf(keyword), index + context.indexOf(keyword) + keyword.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(new ForegroundColorSpan(Color.parseColor("#4BFFD4")), index + context.indexOf(keyword2), index + context.indexOf(keyword2) + keyword2.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return builder;
}
}