国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現朋友圈評論回復列表

2019-10-22 18:23:19
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android實現朋友圈評論回復列表的具體代碼,供大家參考,具體內容如下

正文

還是老流程,先來看一下效果圖:

Android朋友圈評論回復列表,Android朋友圈回復列表,Android朋友圈評論回復

然后是主要實現代碼:

CommentsView

public class CommentsView extends LinearLayout { private Context mContext; private List<CommentsBean> mDatas; private onItemClickListener listener; public CommentsView(Context context) {  this(context, null); } public CommentsView(Context context, @Nullable AttributeSet attrs) {  this(context, attrs, 0); } public CommentsView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  setOrientation(VERTICAL);  this.mContext = context; } /**  * 設置評論列表信息  *  * @param list  */ public void setList(List<CommentsBean> list) {  mDatas = list; } public void setOnItemClickListener(onItemClickListener listener) {  this.listener = listener; } public void notifyDataSetChanged() {  removeAllViews();  if (mDatas == null || mDatas.size() <= 0) {   return;  }  LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);  layoutParams.setMargins(0, 10, 0, 10);  for (int i = 0; i < mDatas.size(); i++) {   View view = getView(i);   if (view == null) {    throw new NullPointerException("listview item layout is null, please check getView()...");   }   addView(view, i, layoutParams);  } } private View getView(final int position) {  final CommentsBean item = mDatas.get(position);  UserBean replyUser = item.getReplyUser();  boolean hasReply = false; // 是否有回復  if (replyUser != null) {   hasReply = true;  }  TextView textView = new TextView(mContext);  textView.setTextSize(15);  textView.setTextColor(0xff686868);  SpannableStringBuilder builder = new SpannableStringBuilder();  UserBean comUser = item.getCommentsUser();  String name = comUser.getUserName();  if (hasReply) {   builder.append(setClickableSpan(name, item.getCommentsUser()));   builder.append(" 回復 ");   builder.append(setClickableSpan(replyUser.getUserName(), item.getReplyUser()));  } else {   builder.append(setClickableSpan(name, item.getCommentsUser()));  }  builder.append(" : ");  builder.append(setClickableSpanContent(item.getContent(), position));  textView.setText(builder);  // 設置點擊背景色  textView.setHighlightColor(getResources().getColor(android.R.color.transparent));//  textView.setHighlightColor(0xff000000);  textView.setMovementMethod(new CircleMovementMethod(0xffcccccc, 0xffcccccc));  textView.setOnClickListener(new OnClickListener() {   @Override   public void onClick(View v) {    if (listener != null) {     listener.onItemClick(position, item);    }   }  });  return textView; } /**  * 設置評論內容點擊事件  *  * @param item  * @param position  * @return  */ public SpannableString setClickableSpanContent(final String item, final int position) {  final SpannableString string = new SpannableString(item);  ClickableSpan span = new ClickableSpan() {   @Override   public void onClick(View widget) {    // TODO: 2017/9/3 評論內容點擊事件    Toast.makeText(mContext, "position: " + position + " , content: " + item, Toast.LENGTH_SHORT).show();   }   @Override   public void updateDrawState(TextPaint ds) {    super.updateDrawState(ds);    // 設置顯示的內容文本顏色    ds.setColor(0xff686868);    ds.setUnderlineText(false);   }  };  string.setSpan(span, 0, string.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  return string; } /**  * 設置評論用戶名字點擊事件  *  * @param item  * @param bean  * @return  */ public SpannableString setClickableSpan(final String item, final UserBean bean) {  final SpannableString string = new SpannableString(item);  ClickableSpan span = new ClickableSpan() {   @Override   public void onClick(View widget) {    // TODO: 2017/9/3 評論用戶名字點擊事件    Toast.makeText(mContext, bean.getUserName(), Toast.LENGTH_SHORT).show();   }   @Override   public void updateDrawState(TextPaint ds) {    super.updateDrawState(ds);    // 設置顯示的用戶名文本顏色    ds.setColor(0xff387dcc);    ds.setUnderlineText(false);   }  };  string.setSpan(span, 0, string.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  return string; } /**  * 定義一個用于回調的接口  */ public interface onItemClickListener {  void onItemClick(int position, CommentsBean bean); }}

CircleMovementMethod

public class CircleMovementMethod extends BaseMovementMethod { private final static int DEFAULT_COLOR_ID = android.R.color.transparent; /**  * 整個textView的背景色  */ private int textViewBgColor; /**  * 點擊部分文字時部分文字的背景色  */ private int clickableSpanBgClor; private BackgroundColorSpan mBgSpan; private ClickableSpan[] mClickLinks; /**  * @param clickableSpanBgClor 點擊選中部分時的背景色  */ public CircleMovementMethod(int clickableSpanBgClor) {  this.clickableSpanBgClor = clickableSpanBgClor; } /**  * @param clickableSpanBgClor 點擊選中部分時的背景色  * @param textViewBgColor  整個textView點擊時的背景色  */ public CircleMovementMethod(int clickableSpanBgClor, int textViewBgColor) {  this.textViewBgColor = textViewBgColor;  this.clickableSpanBgClor = clickableSpanBgClor; } public boolean onTouchEvent(TextView widget, Spannable buffer,        MotionEvent event) {  int action = event.getAction();  if (action == MotionEvent.ACTION_DOWN) {   int x = (int) event.getX();   int y = (int) event.getY();   x -= widget.getTotalPaddingLeft();   y -= widget.getTotalPaddingTop();   x += widget.getScrollX();   y += widget.getScrollY();   Layout layout = widget.getLayout();   int line = layout.getLineForVertical(y);   int off = layout.getOffsetForHorizontal(line, x);   mClickLinks = buffer.getSpans(off, off, ClickableSpan.class);   if (mClickLinks.length > 0) {    // 點擊的是Span區域,不要把點擊事件傳遞    Selection.setSelection(buffer,      buffer.getSpanStart(mClickLinks[0]),      buffer.getSpanEnd(mClickLinks[0]));    //設置點擊區域的背景色    mBgSpan = new BackgroundColorSpan(clickableSpanBgClor);    buffer.setSpan(mBgSpan,      buffer.getSpanStart(mClickLinks[0]),      buffer.getSpanEnd(mClickLinks[0]),      Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);   } else {    // textview選中效果//    widget.setBackgroundColor(textViewBgColor);    widget.setBackgroundResource(DEFAULT_COLOR_ID);   }  } else if (action == MotionEvent.ACTION_UP) {   if (mClickLinks.length > 0) {    mClickLinks[0].onClick(widget);    if (mBgSpan != null) {//移除點擊時設置的背景span     buffer.removeSpan(mBgSpan);    }   } else {   }   Selection.removeSelection(buffer);   widget.setBackgroundResource(DEFAULT_COLOR_ID);  } else if (action == MotionEvent.ACTION_MOVE) {   //這種情況不用做處理  } else {   if (mBgSpan != null) {//移除點擊時設置的背景span    buffer.removeSpan(mBgSpan);   }   widget.setBackgroundResource(DEFAULT_COLOR_ID);  }  return Touch.onTouchEvent(widget, buffer, event); }}

相關數據結構(模擬)

CommentsBean

public class CommentsBean implements Serializable { private int commentsId; private String content; private UserBean replyUser; // 回復人信息 private UserBean commentsUser; // 評論人信息 public int getCommentsId() {  return commentsId; } public void setCommentsId(int commentsId) {  this.commentsId = commentsId; } public String getContent() {  return content; } public void setContent(String content) {  this.content = content; } public UserBean getReplyUser() {  return replyUser; } public void setReplyUser(UserBean replyUser) {  this.replyUser = replyUser; } public UserBean getCommentsUser() {  return commentsUser; } public void setCommentsUser(UserBean commentsUser) {  this.commentsUser = commentsUser; }}

UserBean

public class UserBean implements Serializable { private int userId; private String userName; public int getUserId() {  return userId; } public void setUserId(int userId) {  this.userId = userId; } public String getUserName() {  return userName; } public void setUserName(String userName) {  this.userName = userName; }}

用法

<com.lvfq.myworkingtest.dynamic.view.CommentsView  android:id="@+id/commentView"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_margin="@dimen/dp_20" />commentView = LvV.find(this, R.id.commentView);commentView.setList(Data.getComments());commentView.setOnItemClickListener(new CommentsView.onItemClickListener() { @Override public void onItemClick(int position, CommentsBean bean) { }});commentView.notifyDataSetChanged();

代碼已整理到Github

附:如果需要完整朋友圈項目的話,這里推薦一個 Github 項目仿微信實現的朋友圈

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德保县| 巴东县| 韩城市| 桂阳县| 定安县| 绵竹市| 梅州市| 隆尧县| 德令哈市| 台南市| 乳山市| 宜宾市| 浮梁县| 绥德县| 静乐县| 延川县| 曲阳县| 长顺县| 白沙| 双江| 榆社县| 沽源县| 正宁县| 徐水县| 新绛县| 砚山县| 泰安市| 奉化市| 库尔勒市| 班玛县| 霍州市| 丹阳市| 乡城县| 南平市| 拉孜县| 钟祥市| 肃南| 武威市| 绥宁县| 江达县| 太谷县|