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.umeng.analytics.MobclickAgent; 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 mList; private LayoutInflater mInflater; private View.OnClickListener mOnClickListener; private OnItemClickListener 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 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 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 = "整蠱來了! "; 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 ) { 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("@" + bean.getUserNiceName() + "  " + 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); 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 { private LayoutInflater mInflater; private List mDatas; /** * 是否可选 */ public ListAdapter(Context context, List 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 = "" + keyword + ""; // keywordHtml = "" + keyword2 + ""; // } // // contextHtml = "" + context + ""; // 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; } }