731 lines
33 KiB
Java
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;
|
|
}
|
|
}
|