Android TagCloudView云標(biāo)簽的靈活運(yùn)用

這兩天做了一個(gè)項(xiàng)目,發(fā)現(xiàn)標(biāo)簽不能更改任意一個(gè)標(biāo)簽的字體的顏色,需求如同置前標(biāo)簽电湘,然后就對(duì)tagcloudeview稍做修改做了這么一個(gè)demo。不為別的鹅经,只為以后自己用的時(shí)候方便拷貝寂呛。
先看效果圖:

示意圖

這兩天做了一個(gè)項(xiàng)目,需求如同置前標(biāo)簽瘾晃,然后就對(duì)tagcloudeview稍做修改做了這么一個(gè)demo贷痪。不為別的,只為以后自己用的時(shí)候方便拷貝蹦误。
云標(biāo)簽開(kāi)源地址https://github.com/kingideayou/TagCloudView
本項(xiàng)目開(kāi)源地址:https://github.com/a12a15a05/TagCloudViewDemo
在源碼里面加了兩個(gè)方法

/**修改某些位置定點(diǎn)顏色**/

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();

}

一目了然的方法劫拢,所以不多做解釋 另外加了一個(gè)選中字體顏色的全局常量,和一個(gè)int變量

private static final int SELCECT_TEXT_COLOR = R.color.yellow_bg;//選中后的標(biāo)簽顏色 
private int mSeclectTagColor;

在styles.xml中給TagCloudView增加了一個(gè)選中字體顏色的attr

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

剩下就是運(yùn)用的地方不多說(shuō)强胰,直接上代碼

public class MainActivity extends AppCompatActivity {

private TagCloudView normalTagView;//標(biāo)準(zhǔn)

private TagCloudView selectTagUseView;//置前

private TagCloudView positionsView;//定點(diǎn)

private List<String> AllTagsNormal = new ArrayList<>(0);//整個(gè)標(biāo)簽存放集合

private List<String> AllTagsSelect = new ArrayList<>(0);//整個(gè)標(biāo)簽存放集合

private List<String> AllTagsPosition = new ArrayList<>(0);//整個(gè)標(biāo)簽存放集合

private List<String> selectTags = new ArrayList<>(0);//選中的標(biāo)簽

private List<String> notSelectTags = new ArrayList<>(0);//未選中的標(biāo)簽

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("普通標(biāo)簽" + i);

AllTagsSelect.add("置前標(biāo)簽" + i);

AllTagsPosition.add("定點(diǎn)標(biāo)簽" + 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();//清空舱沧,重新裝數(shù)據(jù)

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);

//用一個(gè)hashmap存放當(dāng)前位置是否需要變色

bindPositionView(3);

bindPositionView(6);

bindPositionView(9);

}

/**

 * 定點(diǎn)標(biāo)簽記錄和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);

}

}

}

/**

 * 選中標(biāo)簽的運(yùn)用

 **/

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);

}

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市偶洋,隨后出現(xiàn)的幾起案子熟吏,更是在濱河造成了極大的恐慌,老刑警劉巖涡真,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件分俯,死亡現(xiàn)場(chǎng)離奇詭異肾筐,居然都是意外死亡哆料,警方通過(guò)查閱死者的電腦和手機(jī)缸剪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)东亦,“玉大人杏节,你說(shuō)我怎么就攤上這事〉湔螅” “怎么了奋渔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)壮啊。 經(jīng)常有香客問(wèn)我嫉鲸,道長(zhǎng),這世上最難降的妖魔是什么歹啼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任玄渗,我火速辦了婚禮,結(jié)果婚禮上狸眼,老公的妹妹穿的比我還像新娘藤树。我一直安慰自己,他們只是感情好拓萌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布岁钓。 她就那樣靜靜地躺著,像睡著了一般微王。 火紅的嫁衣襯著肌膚如雪屡限。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天炕倘,我揣著相機(jī)與錄音囚霸,去河邊找鬼。 笑死激才,一個(gè)胖子當(dāng)著我的面吹牛拓型,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瘸恼,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼劣挫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了东帅?” 一聲冷哼從身側(cè)響起压固,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靠闭,沒(méi)想到半個(gè)月后帐我,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體坎炼,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年拦键,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谣光。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芬为,死狀恐怖萄金,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情媚朦,我是刑警寧澤氧敢,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站询张,受9級(jí)特大地震影響孙乖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜份氧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一唯袄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧半火,春花似錦越妈、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至店归,卻和暖如春阎抒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背消痛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工且叁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秩伞。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓逞带,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纱新。 傳聞我的和親對(duì)象是個(gè)殘疾皇子展氓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容