這兩天做了一個項目,發現標簽不能更改任意一個標簽的字體的顏色,需求如同置前標簽,然后就對tagcloudeview稍做修改做了這么一個demo。不為別的,只為以后自己用的時候方便拷貝。
先看效果圖:
這兩天做了一個項目,需求如同置前標簽,然后就對tagcloudeview稍做修改做了這么一個demo。不為別的,只為以后自己用的時候方便拷貝。
在源碼里面加了兩個方法
/**修改某些位置定點顏色**/  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變量
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<>(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);  }}項目下載地址
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答