JAVA制作QQ空间点赞_仿QQ空间点赞列表的实现【原创】

之前要做一个类似于QQ空间的点赞人的实现,期初用到的流式布局来做的,但是后期发现有个很大的弊端就是格式会乱掉,很不整齐美观,于是就通过查资料实现了另一种方式,先来看看效果图。

Screenshot_2016-11-22-17-13-12-082_com.example.administrator.textviewclickdmo-169x300.png

代码:

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.text.SpannableString;

import android.text.SpannableStringBuilder;

import android.text.Spanned;

import android.text.TextPaint;

import android.text.method.LinkMovementMethod;

import android.text.style.ClickableSpan;

import android.text.style.ImageSpan;

import android.view.View;

import android.widget.TextView;

import android.widget.Toast;

import java.util.ArrayList;

import java.util.List;

public class MainActivity extends AppCompatActivity {

TextView mTvName;

List mListZambiaData=new ArrayList<>();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTvName= (TextView) findViewById(R.id.tv_name);

for (int i = 1; i < 22; i++) {

mListZambiaData.add(new Eneity(i+"","小明"+i));

}

StringBuilder sb = new StringBuilder();

for (int i = 0; i < mListZambiaData.size(); i++) {

sb.append(mListZambiaData.get(i).getName() + ", ");

}

String users = sb.substring(0, sb.lastIndexOf(", "));

mTvName.setMovementMethod(LinkMovementMethod.getInstance());

mTvName.setText(addClickPart(users), TextView.BufferType.SPANNABLE);

}

//定义点击每个部分文字的处理方法

private SpannableStringBuilder addClickPart(String users) {

ImageSpan imageSpan=new ImageSpan(getApplicationContext(),R.mipmap.dynamic_click_a_like);

SpannableString spanStr = new SpannableString("0");//任意文字 主要是实现效果

// Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 前后都不包括

spanStr.setSpan(imageSpan,0,1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//创建一个ssb 存储总的用户

SpannableStringBuilder ssb = new SpannableStringBuilder(spanStr);

ssb.append(users);

//为每段数据创建点击 事件

String[] users_array = users.split(", ");

if (users_array.length > 0) {

for (int i = 0; i < users_array.length; i++) {

final String user_name = users_array[i];//好友0

int start = users.indexOf(user_name) + spanStr.length();

//为每段数据增加点击事件

final int finalI = i;

ssb.setSpan(new ClickableSpan() {

@Override

public void onClick(View widget) {

if (!mListZambiaData.get(finalI).getId().equals("-1")) {

Toast.makeText(MainActivity.this

,"名字:"+mListZambiaData.get(finalI).getName()+"\n"

+"好友id:"+mListZambiaData.get(finalI).getId()

,Toast.LENGTH_SHORT).show();

}

}

@Override

public void updateDrawState(TextPaint ds) {

super.updateDrawState(ds);

ds.setColor(getResources().getColor(R.color.mycolor));

ds.setUnderlineText(false);//下划线

}

}, start, start + user_name.length(), 0);

}

}

return ssb.append("等" + users_array.length + "位好友觉得很赞");

}

class Eneity{

private String id;

private String name;

public Eneity(String id, String name) {

this.id = id;

this.name = name;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

}

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/18724.html

75d087ef9a9fb11dc373caaf33adbf7f.png

微信打赏

支付宝打赏

感谢您对作者Joy的打赏,我们会更加努力!    如果您想成为作者,请点我

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值