pdlivexp/live/src/main/java/com/yunbao/live/adapter/LiveChatAdapter.java
zlzw e89e82483b 调整中英文
调整开播频道接口
2023-09-04 16:25:06 +08:00

731 lines
33 KiB
Java

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.FrameLayout;
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.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;
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;
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 = "整蠱來了! ";
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图聊天气泡
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 = "火力四射,魅力無限!感謝";
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图聊天气泡
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 = "甜蜜不停,愛意不斷!恭喜";
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.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 || bean.getType()==TYPE_TO_USER_MSG) {
mTextView.setTextColor(Color.parseColor("#ffffff"));
new LoadDian9TuUtil().loadDian9TuAssets(mContext, mBg, 1);
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) {//自动消息,点击发言
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);
btnAttention.setVisibility(bean.isAttention() ? 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;
}
}