安卓实现仿微信点赞好友昵称列表,中间用逗号隔开

要实现一个仿微信那样的点赞列表,显示好友的昵称,中间用逗号隔开,并且点击好友昵称跳转到好友的详情页或者实现其他的操作。效果图如下:

第一步:我们需要先定义一个view,去实现列表的显示和点击事件:

public class LikesView extends TextView {
    private Context mContext;
    private List<LikeBean> list;
    private int size;

    public LikesView(Context Context) {
        this(Context, null);
    }

    public LikesView(Context Context, @Nullable AttributeSet attrs) {
        this(Context, attrs, 0);
    }

    public LikesView(Context Context, @Nullable AttributeSet attrs, int defstyleattr) {
        super(Context, attrs, defstyleattr);
        mContext = Context;
    }

    /**
     * 设置点赞数据
     *
     * @param list
     */
    public void setList(List<LikeBean> list,int size) {
        this.list = list;
        this.size = size;
    }

    /**
     * 刷新点赞列表
     */
    public void notifyDataSetChanged() {
        if (list == null || list.size() <= 0) {
            return;
        }
        SpannableStringBuilder builder = new SpannableStringBuilder();
        builder.append(setImageSpan()).append("  ");
        for (int i = 0; i < list.size(); i++) {
            // 我写的最多显示9个昵称,超过的就不显示了
            if (i > 9) {
                break;
            }
            LikeBean item = list.get(i);
            builder.append(setClickableSpan(item.getName(), item));
            // 昵称之间用逗号隔开,也可以定义其他符号,看心情咯
            if (i != list.size() - 1) {
                builder.append(" , ");
            } else {
                builder.append(" ");
            }
        }
        // 如果长度超过10个,就省略显示
        if (size > 10) {
            builder.append("等" + size + "个人点赞了");
        }

        setText(builder);
        setMovementMethod(new LinkMovementMethod());
    }

    /**
     * 设置用户名字点击事件
     *
     * @param item
     * @param bean
     * @return
     */
    public SpannableString setClickableSpan(final String item, final LikeBean bean) {
        final SpannableString string = new SpannableString(item);
        ClickableSpan span = new ClickableSpan() {
            @Override
            public void onClick(View widget) {
               // TODO 这里写你的逻辑,处理昵称的点击事件
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                // 设置昵称的颜色
                ds.setColor(Color.parseColor("#3865A8"));
                ds.setUnderlineText(false);
            }

        };

        string.setSpan(span, 0, string.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return string;
    }

    /**
     * 设置点赞图标
     *
     * @return
     */
    private SpannableString setImageSpan() {
        String text = " ";
        SpannableString imgSpanText = new SpannableString(text);
        // 这里是在点赞列表的最前面加上心形的图标,可以改成自己需要的
        imgSpanText.setSpan(new ImageSpan(getContext(), R.mipmap.blue_like,
                        DynamicDrawableSpan.ALIGN_BASELINE),
                0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return imgSpanText;
    }

第二步:控件定义好了,就可以开始使用了,先在布局里面写一下:

<LikesView
    android:id="@+id/like_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:nestedScrollingEnabled="false"
    <!--设置字体直接的间隔--!>
    android:lineSpacingExtra="3dp" />

第三步:在activity中设置数据源并刷新列表:

LikesView mLikesView = findViewById(R.id.like_view);
// 数据源类型可以自己根据实际要求去改变,我这里里面放了user_id,name,head_img_url
List<LikeBean> mLikeList = new ArrayList();
mLikeList.add(new LikeBean("1","张三",""));
mLikeList.add(new LikeBean("2","李四",""));
mLikeList.add(new LikeBean("3","王五",""));
// 我项目里并没有把所有的点赞好友返回过来,所以把size单独分开写了
mLikesView.setList(mLikeList , mLikeList.size());
mLikeView.notifyDataSetChanged();

第四步:这样子,就全部实现了,一个简单的好友点赞列表的实现。

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值