TagCloudView云标签的灵活运用
这两天做了一个项目,发现标签不能更改任意一个标签的字体的颜色,需求如同置前标签,然后就对tagcloudeview稍做修改做了这么一个demo。不为别的,只为以后自己用的时候方便拷贝。
先看效果图:
这两天做了一个项目,需求如同置前标签,然后就对tagcloudeview稍做修改做了这么一个demo。不为别的,只为以后自己用的时候方便拷贝。
云标签开源地址https://github.com/kingideayou/TagCloudView
在源码里面加了两个方法
/**修改某些位置定点颜色**/
public void setTagsByPosition(HashMap<Integer, Boolean> positions, List<String> tagList){
this.tags = tagList;
this.removeAllViews();
if (tags != null && tags.size() > ) {
for (int i = ; i < tags.size(); i++) {
TextView tagView = (TextView) mInflater.inflate(mTagResId, null);
if (mTagResId == DEFAULT_TAG_RESID) {
tagView.setBackgroundResource(mBackground);
tagView.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTagSize);
if (positions.get(i)){
tagView.setTextColor(mSeclectTagColor);
}else{
tagView.setTextColor(mTagColor);
}
}
LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
tagView.setLayoutParams(layoutParams);
tagView.setText(tags.get(i));
tagView.setTag(TYPE_TEXT_NORMAL);
final int finalI = i;
tagView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (onTagClickListener != null) {
onTagClickListener.onTagClick(finalI);
}
}
});
addView(tagView);
}
}
postInvalidate();
}
/**最前面的修改颜色**/
public void setTagsByLength(int length,List<String> tagList){
this.tags = tagList;
this.removeAllViews();
if (tags != null && tags.size() > ) { for (int i = ; i < tags.size(); i++) {
TextView tagView = (TextView) mInflater.inflate(mTagResId, null);
if (mTagResId == DEFAULT_TAG_RESID) {
tagView.setBackgroundResource(mBackground);
tagView.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTagSize);
if (i >= length){
tagView.setTextColor(mTagColor);
}else{
tagView.setTextColor(mSeclectTagColor);
}
}
LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
tagView.setLayoutParams(layoutParams);
tagView.setText(tags.get(i));
tagView.setTag(TYPE_TEXT_NORMAL);
final int finalI = i;
tagView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (onTagClickListener != null) {
onTagClickListener.onTagClick(finalI);
}
}
});
addView(tagView);
}
}
postInvalidate();
}
一目了然的方法,所以不多做解释
另外加了一个选中字体颜色的全局常量,和一个int变量
private static final int SELCECT_TEXT_COLOR = R.color.yellow_bg;//选中后的标签颜色
private int mSeclectTagColor;
在styles.xml中给TagCloudView增加了一个选中字体颜色的attr
<attr name="tcvSeclecTextColor" format="reference" />
剩下就是运用的地方
不多说,直接上代码
public class MainActivity extends AppCompatActivity {
private TagCloudView normalTagView;//标准
private TagCloudView selectTagUseView;//置前
private TagCloudView positionsView;//定点
private List<String> AllTagsNormal = new ArrayList<>();//整个标签存放集合
private List<String> AllTagsSelect = new ArrayList<>();//整个标签存放集合
private List<String> selectTags = new ArrayList<>();//选中的标签
private List<String> notSelectTags = new ArrayList<>();//未选中的标签
private List<String> AllTagsPosition = new ArrayList<>();//整个标签存放集合
private HashMap<Integer, Boolean> map = new HashMap<>();//记录选择的位置
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
normalTagView = (TagCloudView) findViewById(R.id.normalTag);
selectTagUseView = (TagCloudView) findViewById(R.id.selcetTagUse);
positionsView = (TagCloudView) findViewById(R.id.positionsTag);
setSupportActionBar(toolbar);
for (int i = ; i < ; i++) {
AllTagsNormal.add("普通标签" + i);
AllTagsSelect.add("置前标签" + i);
AllTagsPosition.add("定点标签" + i);
map.put(i, false);
}
normalTagView.setOnTagClickListener(new TagCloudView.OnTagClickListener() {
@Override
public void onTagClick(int position) {
Snackbar.make(normalTagView, AllTagsNormal.get(position), Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
selectTagUseView.setOnTagClickListener(new TagCloudView.OnTagClickListener() {
@Override
public void onTagClick(int position) {
if (selectTags.contains(AllTagsSelect.get(position))) {//如果选中的里面有 就删掉 扔到未选中的里面去
selectTags.remove(position);
notSelectTags.add(AllTagsSelect.get(position));
} else {
selectTags.add(AllTagsSelect.get(position));//
notSelectTags.remove(position - selectTags.size() + );
}
Snackbar.make(selectTagUseView, AllTagsSelect.get(position), Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
AllTagsSelect.clear();//清空,重新装数据
AllTagsSelect.addAll(selectTags);
AllTagsSelect.addAll(notSelectTags);
bindSelectUseView(selectTags.size());
}
});
positionsView.setOnTagClickListener(new TagCloudView.OnTagClickListener() {
@Override
public void onTagClick(int position) {
bindPositionView(position);
Snackbar.make(positionsView, AllTagsPosition.get(position), Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
normalTagView.setTags(AllTagsNormal);
int selectLength = ;
bindSelectUseView(selectLength);
//用一个hashmap存放当前位置是否需要变色
bindPositionView();
bindPositionView();
bindPositionView();
}
/**
* 定点标签记录和view变化
**/
private void bindPositionView(int position) {
for (int i = ; i < AllTagsPosition.size(); i++) {
if (i == position) {
if (map.get(i)) {
map.put(i, false);
} else {
map.put(i, true);
}
} else {
if (map.get(i)) {
map.put(i, true);
} else {
map.put(i, false);
}
}
}
positionsView.setTagsByPosition(map, AllTagsPosition);
for (int i = ; i < AllTagsPosition.size(); i++) {
if (map.get(i)) {
positionsView.getChildAt(i).setBackgroundResource(R.drawable.edit_style_yellow);
}
}
}
/**
* 选中标签的运用
**/
private void bindSelectUseView(int selectLength) {
selectTagUseView.setTagsByLength(selectLength, AllTagsSelect);
selectTags.clear();
notSelectTags.clear();
for (int i = ; i < AllTagsSelect.size(); i++) {
if (i < selectLength) {
selectTags.add(AllTagsSelect.get(i));//选中的存放入集合
selectTagUseView.getChildAt(i).setBackgroundResource(R.drawable.edit_style_yellow);
} else {
notSelectTags.add(AllTagsSelect.get(i));//未选中的存放入集合
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
项目下载地址:https://github.com/a12a15a05/TagCloudViewDemo
TagCloudView云标签的灵活运用的更多相关文章
- Android 3d云标签
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWluZ3l1ZV8xMTI4/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- Word云(标签云)生成器控件。net Windows。形式在c#中
下载demo - 37.1 KB 下载source code - 48.7 KB 背景 这种控制方式的灵感来自于一种名为Wordle的基于网络的免费单词云生成器.实际上,这个控件是我的项目http:/ ...
- 非常漂亮js动态球型云标签特效代码
<%@ page contentType="text/html;charset=UTF-8" language="java" import="j ...
- 和阿文一起学H5-文字云制作
---恢复内容开始--- 实用工具!优秀的标签云免费生成工具 来源:http://www.uisdc.com/online-word-cloud-generators 标签云或文字云是关键词的视觉化描 ...
- AIROBOT系统 之 私人存储 和 DLNA 智能电视云
需求背景 工作多年之后发现有太多的电子资料到处存放.个人电脑是Mac,硬盘都不大,放不了太多东西.并且有时候想随时随地存放一些东西.所有就有了大家一个私有存储的需求 个人休息在家经常喜欢看电影电视剧, ...
- matlab 三维激光雷达点云的地面与障碍物检测
基于激光雷达的地面与障碍物检测 这个例子告诉我们如何去检测地平面并且找到三维LIDAR数据中与车相近的障碍物. 这个过程能够方便我们对汽车导航的可行驶区域规划. 注:每一帧的雷达属于都被存储为三维的雷 ...
- jQuery 动态标签生成插件
前言: 最近对js的插件封装特别感兴趣,无耐就目前的技术想做到js的完全封装,还是有一定困难,就基于jQuery封装了一个小的插件,而且是基于对象级开发的,不是添加全局方法.高深的语法几乎没有,就有一 ...
- 你还在用a标签吗?——用button替代a
前言:a标签,不止你在用,我也在用.但某些时候我们可以考虑用button替代a. 在多页应用中,a标签很常见,我们常用来作为一个普通超链接,进行页面跳转. 而在单页应用中,我们使用路由进行页面切换,a ...
- Android 开源项目分类汇总(转)
Android 开源项目分类汇总(转) ## 第一部分 个性化控件(View)主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Galler ...
随机推荐
- C# 高效率创建字符串类(StringBuilder)
1.为什么需要StringBuilder类? 因为String类型代表不可变字符串,所以无法对当前String类型实例进行处理.所以FCL提供了System.Text.StringBuilder类型, ...
- Maven内置属性,pom属性
内置属性(Maven预定义,用户可以直接使用) ${basedir}表示项目根目录,即包含pom.xml文件的目录; ${version}表示项目版本; ${project.basedir}同${ba ...
- C#基础篇四数组
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace P01A ...
- macOS Java安装与配置
运行环境: macOS Hight Sierra(Version 10.13.6) Terminal(oh my zsh) 下载安装JRE Download URL 下载安装JDK Download ...
- redis学习(三)redis持久化
redis持久化 1.redis持久化介绍 我们知道redis性能之所以强悍,是因为redis在运行时将数据都存放在了访问效率远高于硬盘的内存之中.可是这带来了新的问题:在redis或者外部系统重启时 ...
- GCC 多文件编辑
#include <stdio.h> int plus(int a, int b); int minus(int a, int b); int multiply(int a, int b) ...
- Linux QT 连接 Sqlite数据库
#include <QApplication> #include <QDebug> #include <QSqlQuery> #include <QSqlDa ...
- XML Parsing Error: no element found Location: moz-nullprincipal:{23686e7a-652b-4348-92f4-7fb3575179ed} Line Number 1, Column 1:^
“Hi Insus.NET, 我有参考你下午发布的一篇<jQuery.Ajax()执行WCF Service的方法>http://www.cnblogs.com/insus/p/37278 ...
- Hibernate Tools for Eclipse的使用
Hibernate Tools的官方网站:http://hibernate.org/tools/Step1.安装好Hibernate Tools,建立一个Dynamic web project,工程名 ...
- c# List< int>和List< string>互相转换
c# List< int>和List< string>互相转换 定义一个list< t> List<int> list = new List<in ...