最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實現(xiàn)朋友圈評論回復列表

 更新時間:2017年11月15日 09:10:43   作者:發(fā)強  
這篇文章主要為大家詳細介紹了Android實現(xiàn)朋友圈評論回復列表,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

Android實現(xiàn)朋友圈評論回復列表

Android實現(xiàn)朋友圈點贊列表

Android實現(xiàn)朋友圈多圖顯示功能

正文

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

然后是主要實現(xiàn)代碼:

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區(qū)域,不要把點擊事件傳遞
    Selection.setSelection(buffer,
      buffer.getSpanStart(mClickLinks[0]),
      buffer.getSpanEnd(mClickLinks[0]));
    //設置點擊區(qū)域的背景色
    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);
 }
}

相關數(shù)據(jù)結構(模擬)

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 項目仿微信實現(xiàn)的朋友圈

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

  • Android中Notification的用法匯總

    Android中Notification的用法匯總

    這篇文章主要介紹了Android中Notification的用法匯總的相關資料,需要的朋友可以參考下
    2016-01-01
  • android開發(fā)教程之使用listview顯示qq聯(lián)系人列表

    android開發(fā)教程之使用listview顯示qq聯(lián)系人列表

    這篇文章主要介紹了android使用listview顯示qq聯(lián)系人列表的示例,需要的朋友可以參考下
    2014-02-02
  • Android中activity跳轉按鈕事件的四種寫法

    Android中activity跳轉按鈕事件的四種寫法

    這篇文章主要介紹了Android中activity跳轉按鈕事件的四種寫法,下文中包括四個activity的內容詳解,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • android仿直播圓點加載效果

    android仿直播圓點加載效果

    這篇文章主要為大家詳細介紹了android仿直播圓點加載效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • android獲取聯(lián)系人示例分享

    android獲取聯(lián)系人示例分享

    這篇文章主要介紹了android獲取聯(lián)系人示例,需要的朋友可以參考下
    2014-02-02
  • Android系統(tǒng)音量條實例代碼

    Android系統(tǒng)音量條實例代碼

    這篇文章主要介紹了Android系統(tǒng)音量條實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Android 中使用 AsyncTask 異步讀取網絡圖片

    Android 中使用 AsyncTask 異步讀取網絡圖片

    這篇文章主要介紹了Android 中使用 AsyncTask 異步讀取網絡圖片的相關資料,需要的朋友可以參考下
    2016-02-02
  • Android編程實現(xiàn)向桌面添加快捷方式的方法

    Android編程實現(xiàn)向桌面添加快捷方式的方法

    這篇文章主要介紹了Android編程實現(xiàn)向桌面添加快捷方式的方法,結合實例形式詳細分析了Android添加桌面快捷方式的操作技巧,需要的朋友可以參考下
    2016-11-11
  • Android應用程序“R文件”消失

    Android應用程序“R文件”消失

    這篇文章主要介紹了Android應用程序“R文件”消失的相關資料,需要的朋友可以參考下
    2016-09-09
  • 最新評論

    安吉县| 新竹市| 鄂州市| 集安市| 西贡区| 措勤县| 上思县| 晋中市| 西充县| 牡丹江市| 巢湖市| 嘉荫县| 寻甸| 蓝山县| 遂昌县| 黔西| 宜阳县| 元氏县| 衡阳市| 黔东| 高密市| 天祝| 霍邱县| 鹤峰县| 雅江县| 宝应县| 韶山市| 资阳市| 岫岩| 霞浦县| 临朐县| 常宁市| 德庆县| 剑河县| 酒泉市| 保定市| 尚义县| 新闻| 饶阳县| 牙克石市| 牡丹江市|