这两天做了一个项目,发现标签不能更改任意一个标签的字体的颜色,需求如同置前标签,然后就对tagcloudeview稍做修改做了这么一个demo。不为别的,只为以后自己用的时候方便拷贝。

先看效果图: 
 
这两天做了一个项目,需求如同置前标签,然后就对tagcloudeview稍做修改做了这么一个demo。不为别的,只为以后自己用的时候方便拷贝。

云标签开源地址https://github.com/kingideayou/TagCloudView 
在源码里面加了两个方法

 1 /**修改某些位置定点颜色**/
 2     public void setTagsByPosition(HashMap<Integer, Boolean> positions, List<String> tagList){
 3         this.tags = tagList;
 4         this.removeAllViews();
 5         if (tags != null && tags.size() > 0) {
 6             for (int i = 0; i < tags.size(); i++) {
 7                 TextView tagView = (TextView) mInflater.inflate(mTagResId, null);
 8                 if (mTagResId == DEFAULT_TAG_RESID) {
 9                     tagView.setBackgroundResource(mBackground);
10                     tagView.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTagSize);
11                     if (positions.get(i)){
12                         tagView.setTextColor(mSeclectTagColor);
13                     }else{
14                         tagView.setTextColor(mTagColor);
15                     }
16                 }
17                 LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
18                 tagView.setLayoutParams(layoutParams);
19                 tagView.setText(tags.get(i));
20                 tagView.setTag(TYPE_TEXT_NORMAL);
21                 final int finalI = i;
22                 tagView.setOnClickListener(new OnClickListener() {
23                     @Override
24                     public void onClick(View v) {
25                         if (onTagClickListener != null) {
26                             onTagClickListener.onTagClick(finalI);
27                         }
28                     }
29                 });
30                 addView(tagView);
31             }
32         }
33         postInvalidate();
34     }
35     /**最前面的修改颜色**/
36     public void setTagsByLength(int length,List<String> tagList){
37         this.tags = tagList;
38         this.removeAllViews();
39         if (tags != null && tags.size() > 0) {
40
41             for (int i = 0; i < tags.size(); i++) {
42                 TextView tagView = (TextView) mInflater.inflate(mTagResId, null);
43                 if (mTagResId == DEFAULT_TAG_RESID) {
44                     tagView.setBackgroundResource(mBackground);
45                     tagView.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTagSize);
46                     if (i >= length){
47                         tagView.setTextColor(mTagColor);
48                     }else{
49                         tagView.setTextColor(mSeclectTagColor);
50                     }
51                 }
52                 LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
53                 tagView.setLayoutParams(layoutParams);
54                 tagView.setText(tags.get(i));
55                 tagView.setTag(TYPE_TEXT_NORMAL);
56                 final int finalI = i;
57                 tagView.setOnClickListener(new OnClickListener() {
58                     @Override
59                     public void onClick(View v) {
60                         if (onTagClickListener != null) {
61                             onTagClickListener.onTagClick(finalI);
62                         }
63                     }
64                 });
65                 addView(tagView);
66             }
67         }
68         postInvalidate();
69     }

一目了然的方法,所以不多做解释 
另外加了一个选中字体颜色的全局常量,和一个int变量

 private static final int SELCECT_TEXT_COLOR = R.color.yellow_bg;//选中后的标签颜色private int mSeclectTagColor;

在styles.xml中给TagCloudView增加了一个选中字体颜色的attr

  <attr name="tcvSeclecTextColor" format="reference" />

剩下就是运用的地方

不多说,直接上代码

  1 public class MainActivity extends AppCompatActivity {
  2     private TagCloudView normalTagView;//标准
  3     private TagCloudView selectTagUseView;//置前
  4     private TagCloudView positionsView;//定点
  5     private List<String> AllTagsNormal = new ArrayList<>(0);//整个标签存放集合
  6     private List<String> AllTagsSelect = new ArrayList<>(0);//整个标签存放集合
  7     private List<String> selectTags = new ArrayList<>(0);//选中的标签
  8     private List<String> notSelectTags = new ArrayList<>(0);//未选中的标签
  9
 10     private List<String> AllTagsPosition = new ArrayList<>(0);//整个标签存放集合
 11     private HashMap<Integer, Boolean> map = new HashMap<>(0);//记录选择的位置
 12
 13     @Override
 14     protected void onCreate(Bundle savedInstanceState) {
 15         super.onCreate(savedInstanceState);
 16         setContentView(R.layout.activity_main);
 17         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
 18         normalTagView = (TagCloudView) findViewById(R.id.normalTag);
 19         selectTagUseView = (TagCloudView) findViewById(R.id.selcetTagUse);
 20         positionsView = (TagCloudView) findViewById(R.id.positionsTag);
 21         setSupportActionBar(toolbar);
 22         for (int i = 0; i < 15; i++) {
 23             AllTagsNormal.add("普通标签" + i);
 24             AllTagsSelect.add("置前标签" + i);
 25             AllTagsPosition.add("定点标签" + i);
 26             map.put(i, false);
 27         }
 28         normalTagView.setOnTagClickListener(new TagCloudView.OnTagClickListener() {
 29             @Override
 30             public void onTagClick(int position) {
 31                 Snackbar.make(normalTagView, AllTagsNormal.get(position), Snackbar.LENGTH_LONG)
 32                         .setAction("Action", null).show();
 33             }
 34         });
 35         selectTagUseView.setOnTagClickListener(new TagCloudView.OnTagClickListener() {
 36             @Override
 37             public void onTagClick(int position) {
 38                 if (selectTags.contains(AllTagsSelect.get(position))) {//如果选中的里面有 就删掉 扔到未选中的里面去
 39                     selectTags.remove(position);
 40                     notSelectTags.add(AllTagsSelect.get(position));
 41                 } else {
 42                     selectTags.add(AllTagsSelect.get(position));//
 43                     notSelectTags.remove(position - selectTags.size() + 1);
 44                 }
 45                 Snackbar.make(selectTagUseView, AllTagsSelect.get(position), Snackbar.LENGTH_LONG)
 46                         .setAction("Action", null).show();
 47
 48                 AllTagsSelect.clear();//清空,重新装数据
 49                 AllTagsSelect.addAll(selectTags);
 50                 AllTagsSelect.addAll(notSelectTags);
 51                 bindSelectUseView(selectTags.size());
 52
 53             }
 54         });
 55         positionsView.setOnTagClickListener(new TagCloudView.OnTagClickListener() {
 56             @Override
 57             public void onTagClick(int position) {
 58                 bindPositionView(position);
 59                 Snackbar.make(positionsView, AllTagsPosition.get(position), Snackbar.LENGTH_LONG)
 60                         .setAction("Action", null).show();
 61             }
 62         });
 63         normalTagView.setTags(AllTagsNormal);
 64
 65
 66         int selectLength = 4;
 67         bindSelectUseView(selectLength);
 68
 69
 70         //用一个hashmap存放当前位置是否需要变色
 71         bindPositionView(3);
 72         bindPositionView(6);
 73         bindPositionView(9);
 74
 75     }
 76
 77     /**
 78      * 定点标签记录和view变化
 79      **/
 80     private void bindPositionView(int position) {
 81         for (int i = 0; i < AllTagsPosition.size(); i++) {
 82             if (i == position) {
 83                 if (map.get(i)) {
 84                     map.put(i, false);
 85                 } else {
 86                     map.put(i, true);
 87                 }
 88             } else {
 89                 if (map.get(i)) {
 90                     map.put(i, true);
 91                 } else {
 92                     map.put(i, false);
 93                 }
 94             }
 95         }
 96         positionsView.setTagsByPosition(map, AllTagsPosition);
 97         for (int i = 0; i < AllTagsPosition.size(); i++) {
 98             if (map.get(i)) {
 99                 positionsView.getChildAt(i).setBackgroundResource(R.drawable.edit_style_yellow);
100             }
101         }
102     }
103
104     /**
105      * 选中标签的运用
106      **/
107     private void bindSelectUseView(int selectLength) {
108         selectTagUseView.setTagsByLength(selectLength, AllTagsSelect);
109         selectTags.clear();
110         notSelectTags.clear();
111         for (int i = 0; i < AllTagsSelect.size(); i++) {
112             if (i < selectLength) {
113                 selectTags.add(AllTagsSelect.get(i));//选中的存放入集合
114                 selectTagUseView.getChildAt(i).setBackgroundResource(R.drawable.edit_style_yellow);
115             } else {
116                 notSelectTags.add(AllTagsSelect.get(i));//未选中的存放入集合
117             }
118         }
119     }
120
121     @Override
122     public boolean onCreateOptionsMenu(Menu menu) {
123         // Inflate the menu; this adds items to the action bar if it is present.
124         getMenuInflater().inflate(R.menu.menu_main, menu);
125         return true;
126     }
127
128     @Override
129     public boolean onOptionsItemSelected(MenuItem item) {
130         // Handle action bar item clicks here. The action bar will
131         // automatically handle clicks on the Home/Up button, so long
132         // as you specify a parent activity in AndroidManifest.xml.
133         int id = item.getItemId();
134
135         //noinspection SimplifiableIfStatement
136         if (id == R.id.action_settings) {
137             return true;
138         }
139
140         return super.onOptionsItemSelected(item);
141     }
142 }

项目下载地址:https://github.com/a12a15a05/TagCloudViewDemo

转载于:https://www.cnblogs.com/ganchuanpu/p/8432125.html

TagCloudView云标签的灵活运用相关推荐

  1. 开源库3dTagCloudAndroid使用,实现3D球形云标签tag效果

    TagCloudView是一个完全基于Android ViewGroup编写的控件,支持 将一组View展示为一个3D球形集合,并支持全方向滚动. GitHub中的链接地址:https://githu ...

  2. UC浏览器云标签怎么用 UC浏览器云标签使用方法

    核心提示:相信很多机友都会使用UC浏览器,但是其多个功能你们能了解多少? 下面小编就为大家介绍UC浏览器云标签使用方法吧! 1.打开[UC浏览器],点击[多窗口]按钮,然后点击[云标签];(如下图所示 ...

  3. 把ueditor的 p 标签 改成a标签_每周一签·35 | 云标签使用常见问题(QA)

    关键词:打印偏差.数据导不进.打印脱机.纸张排版- 相信大家在各自场景使用云标签时, 都会有一些疑惑和问题, 在此,小编选取了提及率较高的几个问题, 为小伙伴们进行解答, 当然,需要进一步交流, 可咨 ...

  4. AndroidTagView 云标签

    AndroidTagView云标签 这是一个Android的云标签示例,这个View支持标签,点击,长按弹出删除对话框,拖拽排序,当前行超出屏幕宽度自动挤压到第二行-- 截图 Usage使用 步骤 1 ...

  5. html层叠云标签代码,可以加载个人博客中,非常炫的特效

    原文:html层叠云标签代码,可以加载个人博客中,非常炫的特效 源代码下载地址:http://www.zuidaima.com/share/1836751885634560.htm 云标签,可以加载个 ...

  6. 重组标签云-标签聚类及其评价研究

    重组标签云-标签聚类及其评价研究 AlbertoPérez García-Plaza a*, Arkaitz Zubiaga b, Víctor Fresnoa,Raquel Martínez a a ...

  7. 云标签,关键字图排版 html5 canvas版

    最近业余时间在做一个云标签相关的信息展现. 大概做成的情况能像微博关键字一样形成这样的图形: 在做的过程当中,查阅了一些资料, 发现自己有点out了,在国外已经在wordle.net这样的网站. 也有 ...

  8. Android Tag-Cloud (云标签) 效果

    最近几次看到这种云标签,兴起就找找资源,看看,研究一下肿么实现的. 1. 一些参考资料: 在Google code上看到的一个例子:传送门  Tagin_Demo_AND_3D_Tag_Cloud 下 ...

  9. ZETag云标签是什么?如何实现贵重包裹跟踪、供应链数字化

    随着物联网技术的发展,物流数字化已经成为行业发展趋势.在物流领域,电子标签正在不断整合多项功能,为物流信息服务提供自动化,可视化管理.ZETag云标签是由纵行科技基于ZETA技术开放的传感标签,ZET ...

最新文章

  1. android studio不自动生成r.java_Android 添加构建依赖
  2. 人工智能都沸腾3年了,现在就业情况还乐观吗?
  3. 那年高考“坑爹“的金思力
  4. Java_Notes_基础排序总结与对比
  5. 【Linux部署】【elasticsearch-6.4.3 单机版】【不能以root用户运行es 及 max_map_count 问题解决】(含 安装包+分词插件 云盘资源)
  6. Linux 利用yum源安装php7.0+nginx
  7. 读上瘾-让用户养成习惯
  8. Linux 命令之 cd 命令-切换目录
  9. java json.tostring,idea以JSON形式重写toString()方法
  10. 经典算法题每日演练——第二十题 三元组
  11. java物流管理系统代码_Java物流配送管理系统 Spring 源码下载
  12. 再也不用花一天时间做ppt了
  13. 工程师原创:人人都看得懂的电磁场理论
  14. 学习笔记:AGPS-SUPL架构
  15. CRMEB 二开短信功能教程
  16. Excel如何判断数据是否重复
  17. ug12无法连接服务器系统,NX许可证错误:无法连接至许可证服务器系统。SPLM_LICENSE_SERVER错误[-15]...
  18. Python之路----文件操作
  19. criterial查询
  20. C/S 开发框架 ----- 广州本地

热门文章

  1. Spring事务传播性与隔离级别
  2. [安全防护]StackGuard和StackShield
  3. [备忘][转载]apache 403错误 You don't have permission to access on this server
  4. 游戏杆编程心得二:如何判断按钮的有效按下
  5. PowerToys,微软开源的超实用小工具合集
  6. C【C#公共帮助类】分页逻辑处理类
  7. 对不队—— Alpha冲刺
  8. 设计模式 - 观察者模式(JDK)
  9. 【Git】git使用 - 各种常用场景命令解决
  10. Base64编码问题( Convert.ToBase64String)问题