TagCloudView云标签的灵活运用
这两天做了一个项目,发现标签不能更改任意一个标签的字体的颜色,需求如同置前标签,然后就对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云标签的灵活运用相关推荐
- 开源库3dTagCloudAndroid使用,实现3D球形云标签tag效果
TagCloudView是一个完全基于Android ViewGroup编写的控件,支持 将一组View展示为一个3D球形集合,并支持全方向滚动. GitHub中的链接地址:https://githu ...
- UC浏览器云标签怎么用 UC浏览器云标签使用方法
核心提示:相信很多机友都会使用UC浏览器,但是其多个功能你们能了解多少? 下面小编就为大家介绍UC浏览器云标签使用方法吧! 1.打开[UC浏览器],点击[多窗口]按钮,然后点击[云标签];(如下图所示 ...
- 把ueditor的 p 标签 改成a标签_每周一签·35 | 云标签使用常见问题(QA)
关键词:打印偏差.数据导不进.打印脱机.纸张排版- 相信大家在各自场景使用云标签时, 都会有一些疑惑和问题, 在此,小编选取了提及率较高的几个问题, 为小伙伴们进行解答, 当然,需要进一步交流, 可咨 ...
- AndroidTagView 云标签
AndroidTagView云标签 这是一个Android的云标签示例,这个View支持标签,点击,长按弹出删除对话框,拖拽排序,当前行超出屏幕宽度自动挤压到第二行-- 截图 Usage使用 步骤 1 ...
- html层叠云标签代码,可以加载个人博客中,非常炫的特效
原文:html层叠云标签代码,可以加载个人博客中,非常炫的特效 源代码下载地址:http://www.zuidaima.com/share/1836751885634560.htm 云标签,可以加载个 ...
- 重组标签云-标签聚类及其评价研究
重组标签云-标签聚类及其评价研究 AlbertoPérez García-Plaza a*, Arkaitz Zubiaga b, Víctor Fresnoa,Raquel Martínez a a ...
- 云标签,关键字图排版 html5 canvas版
最近业余时间在做一个云标签相关的信息展现. 大概做成的情况能像微博关键字一样形成这样的图形: 在做的过程当中,查阅了一些资料, 发现自己有点out了,在国外已经在wordle.net这样的网站. 也有 ...
- Android Tag-Cloud (云标签) 效果
最近几次看到这种云标签,兴起就找找资源,看看,研究一下肿么实现的. 1. 一些参考资料: 在Google code上看到的一个例子:传送门 Tagin_Demo_AND_3D_Tag_Cloud 下 ...
- ZETag云标签是什么?如何实现贵重包裹跟踪、供应链数字化
随着物联网技术的发展,物流数字化已经成为行业发展趋势.在物流领域,电子标签正在不断整合多项功能,为物流信息服务提供自动化,可视化管理.ZETag云标签是由纵行科技基于ZETA技术开放的传感标签,ZET ...
最新文章
- android studio不自动生成r.java_Android 添加构建依赖
- 人工智能都沸腾3年了,现在就业情况还乐观吗?
- 那年高考“坑爹“的金思力
- Java_Notes_基础排序总结与对比
- 【Linux部署】【elasticsearch-6.4.3 单机版】【不能以root用户运行es 及 max_map_count 问题解决】(含 安装包+分词插件 云盘资源)
- Linux 利用yum源安装php7.0+nginx
- 读上瘾-让用户养成习惯
- Linux 命令之 cd 命令-切换目录
- java json.tostring,idea以JSON形式重写toString()方法
- 经典算法题每日演练——第二十题 三元组
- java物流管理系统代码_Java物流配送管理系统 Spring 源码下载
- 再也不用花一天时间做ppt了
- 工程师原创:人人都看得懂的电磁场理论
- 学习笔记:AGPS-SUPL架构
- CRMEB 二开短信功能教程
- Excel如何判断数据是否重复
- ug12无法连接服务器系统,NX许可证错误:无法连接至许可证服务器系统。SPLM_LICENSE_SERVER错误[-15]...
- Python之路----文件操作
- criterial查询
- C/S 开发框架 ----- 广州本地
热门文章
- Spring事务传播性与隔离级别
- [安全防护]StackGuard和StackShield
- [备忘][转载]apache 403错误 You don't have permission to access on this server
- 游戏杆编程心得二:如何判断按钮的有效按下
- PowerToys,微软开源的超实用小工具合集
- C【C#公共帮助类】分页逻辑处理类
- 对不队—— Alpha冲刺
- 设计模式 - 观察者模式(JDK)
- 【Git】git使用 - 各种常用场景命令解决
- Base64编码问题( Convert.ToBase64String)问题