最新消息:文章中包含代码时,请遵守代码高亮规范!

仿QQ空间点赞列表的实现【原创】

Android Joy 1213浏览 0评论

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

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

 

 

 

 

 

 

 

 

 

代码:

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<Eneity> 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


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

您必须 登录 才能发表评论!