服务器之家

服务器之家 > 正文

Android TagCloudView云标签的使用方法

时间:2022-02-27 16:27     来源/作者:兔子吃过窝边草

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

先看效果图:

Android TagCloudView云标签的使用方法

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

云标签开源地址

在源码里面加了两个方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**修改某些位置定点颜色**/
  public void setTagsByPosition(HashMap<Integer, Boolean> positions, List<String> tagList){
    this.tags = tagList;
    this.removeAllViews();
    if (tags != null && tags.size() > 0) {
      for (int i = 0; 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() > 0) {
 
      for (int i = 0; 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变量

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

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

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

剩下就是运用的地方

不多说,直接上代码

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
public class MainActivity extends AppCompatActivity {
  private TagCloudView normalTagView;//标准
  private TagCloudView selectTagUseView;//置前
  private TagCloudView positionsView;//定点
  private List<String> AllTagsNormal = new ArrayList<>(0);//整个标签存放集合
  private List<String> AllTagsSelect = new ArrayList<>(0);//整个标签存放集合
  private List<String> selectTags = new ArrayList<>(0);//选中的标签
  private List<String> notSelectTags = new ArrayList<>(0);//未选中的标签
 
  private List<String> AllTagsPosition = new ArrayList<>(0);//整个标签存放集合
  private HashMap<Integer, Boolean> map = new HashMap<>(0);//记录选择的位置
 
  @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 = 0; i < 15; 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() + 1);
        }
        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 = 4;
    bindSelectUseView(selectLength);
 
 
    //用一个hashmap存放当前位置是否需要变色
    bindPositionView(3);
    bindPositionView(6);
    bindPositionView(9);
 
  }
 
  /**
   * 定点标签记录和view变化
   **/
  private void bindPositionView(int position) {
    for (int i = 0; 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 = 0; 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 = 0; 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://blog.csdn.net/a12a15a05/article/details/50344979

相关文章

热门资讯

2022年最旺的微信头像大全 微信头像2022年最新版图片
2022年最旺的微信头像大全 微信头像2022年最新版图片 2022-01-10
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整 2021-08-24
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
返回顶部