pdlivexp/live/src/main/java/com/yunbao/live/adapter/LiveChatAdapter.java
2022-10-06 17:58:46 +08:00

491 lines
20 KiB
Java

package com.yunbao.live.adapter;
import static com.yunbao.live.bean.LiveChatBean.RECOMMEND_CARD_NOTIFY;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
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.glide.ImgLoader;
import com.yunbao.common.interfaces.OnItemClickListener;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.DpUtil;
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;
public LiveChatAdapter(Context context) {
mContext = context;
mList = new ArrayList<>();
mInflater = LayoutInflater.from(context);
mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Object tag = v.getTag();
if (tag != null) {
LiveChatBean bean = (LiveChatBean) tag;
if (mOnItemClickListener != null) {
if (bean.getType() != LiveChatBean.SYSTEM) {
mOnItemClickListener.onItemClick(bean, 0);
}
}
}
}
};
}
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();
}
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());
}
}
class Vh extends RecyclerView.ViewHolder {
LinearLayout mBg, view_follow, view_action_game, view_zg;
TextView mTextView, tv_chat_active_into, tv_chat_avtive_name, tv_zg_anchorname;
RoundedImageView avatar;
View v_chat_active_close;
RecyclerView rv_chat_active;
ImageView img_zg_img;
public Vh(View itemView) {
super(itemView);
mBg = (LinearLayout) itemView.findViewById(R.id.bg);
mTextView = (TextView) itemView.findViewById(R.id.text_txt);
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);
tv_zg_anchorname = (TextView) itemView.findViewById(R.id.tv_zg_anchorname);
img_zg_img = (ImageView) itemView.findViewById(R.id.img_zg_img);
}
void setData(final LiveChatBean bean, int position) {
itemView.setTag(bean);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, DpUtil.dp2px(80), 12);
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(new View.OnClickListener() {//点击打开活动
@Override
public void onClick(View v) {
String url = CommonAppConfig.HOST + "/" + bean.getContent() + "?uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&anchorUid=" + LiveRoomViewHolder.mLiveUid;
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(new View.OnClickListener() {
@Override
public void onClick(View v) {
removetItem(bean);
}
});
} else if (bean.getType() == -3 || bean.getType() == -4 || bean.getType() == -5) {//整蛊
if (bean.getBubble() != null && !bean.getBubble().equals("")) {
//加载.9图聊天气泡
LoadDian9TuUtil.loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
} else {
mBg.setBackgroundResource(R.drawable.bg_live_chat_item);
}
SpannableStringBuilder builder = new SpannableStringBuilder();
if (bean.getType() == -3) {
String str1 = "整蠱來了! ";
String str2 = "";
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("發出了 " + bean.getContent());
mTextView.setText(builder);
} else if (bean.getType() == -4) {
String str1 = "成功拯救了 ";
String str2 = "免除了 ";
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() + "發起的" + 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图聊天气泡
LoadDian9TuUtil.loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
} else {
mBg.setBackgroundResource(R.drawable.bg_live_chat_item);
}
String str1 = "火力四射,魅力無限!感謝";
String str2 = "為本直播間加成熱度";
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图聊天气泡
LoadDian9TuUtil.loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
} else {
mBg.setBackgroundResource(R.drawable.bg_live_chat_item);
}
String str1 = "甜蜜不停,愛意不斷!恭喜";
String str2 = "在甜蜜約會中搶購到了";
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.SYSTEM) {
boolean isContains = false;
for (LiveChatBean model : mList) {
if (!TextUtils.isEmpty(model.getContent()) && model.getContent().contains("堅決維護青少年群體精神文明健康")) {
isContains = true;
}
}
if (isContains) {
mTextView.setTextColor(0xffffffff);
mBg.setBackground(null);
mTextView.setText(bean.getContent());
}
} 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) {//自动消息,点击发言
boolean isContains = false;
for (LiveChatBean model : mList) {
if (bean.getType() == -2) {
isContains = true;
}
}
if (isContains) {
mBg.setBackgroundResource(R.drawable.bg_chat_automatic_item);
mTextView.setText(R.string.automatic_chat);
bean.setHeart(position);
}
} 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图聊天气泡
LoadDian9TuUtil.loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
LiveTextRender.recommendCardNotify(mContext, mTextView, bean);
} else {
if (bean.getBubble() != null && !bean.getBubble().equals("")) {
//加载.9图聊天气泡
LoadDian9TuUtil.loadDian9Tu(mContext, mBg, bean.getBubble(), 1);
} else {
mBg.setBackgroundResource(R.drawable.bg_live_chat_item);
}
if (bean.getType() == LiveChatBean.ENTER_ROOM || bean.getType() == LiveChatBean.LIGHT) {
mTextView.setTextColor(0xffc8c8c8);
} else {
mTextView.setTextColor(0xffffffff);
}
LiveTextRender.render(mContext, mTextView, bean);
}
}
}
public void insertItem(LiveChatBean bean) {
if (bean == null) {
return;
}
int size = mList.size();
if (size > 0) {
if (mList.get(size - 1).getType() == -10) {
mList.remove(size - 1);
size = size - 1;
}
}
//设置最大展示99条消息
if (size == 100) {
mList.remove(1);
}
mList.add(bean);
notifyItemChanged(size);
LiveChatBean beanNull = new LiveChatBean();
beanNull.setType(-10);
mList.add(beanNull);
notifyItemChanged(size + 1);
if (isSlideToBottom(mRecyclerView)){
mRecyclerView.scrollToPosition(size + 1);
}else {
Bus.get().post(new LiveAudienceEvent()
.setType(LiveAudienceEvent.LiveAudienceType.NEW_MESSAGE_REMINDER));
}
}
/**
* 判断是否滚到底部
*
* @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(mList.size() - 1);
}
}
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));
}
}
}
}