国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

自定義view實(shí)戰(zhàn)筆記--快速索引

2019-11-09 17:06:25
字體:
供稿:網(wǎng)友

一:在java中,自定義類想要比較需要實(shí)現(xiàn)Comparable接口,并重寫compareTo方法

二:可以使用工具類Collections.sort(haoHanArrayList);對(duì)自定義集合進(jìn)行排序

三:除以2,可以使用乘以0.5f,這樣不容易丟失精度

四:要讓字母顯示在父控件的中間,可以如下:

//1 繪制 A-Z 26個(gè)字母 for (int i = 0; i < LETTERS.length; i++) { mPaint.setColor(i == lastTouchIndex ? Color.GREEN : Color.WHITE); //獲取到字母的邊界矩形 Rect rect = new Rect(); mPaint.getTextBounds(LETTERS[i], 0, LETTERS[i].length(), rect); //把字母畫在單元格的中間 float x = ceilWidth * 0.5f - rect.width() * 0.5f; float y = ceilHeight * 0.5f + rect.height() * 0.5f + i * ceilHeight; canvas.drawText(LETTERS[i], x, y, mPaint); }

五:判斷觸摸到哪個(gè)字母,并且提高效率

//判斷觸摸到了哪個(gè)字母 float downY = event.getY(); currentTouchIndex = (int) (downY / ceilHeight); if (currentTouchIndex != lastTouchIndex) { if (currentTouchIndex >= 0 && currentTouchIndex < LETTERS.length) { lastTouchIndex = currentTouchIndex; Utils.showToast(getContext(), LETTERS[lastTouchIndex]); if (mOnLetterChangeListener != null) { mOnLetterChangeListener.onLetterChange(LETTERS[lastTouchIndex]); } } }

六:理解監(jiān)聽回調(diào)的步驟,一般自定義view肯定會(huì)用到

public void setOnLetterChangeListener(OnLetterChangeListener mOnLetterChangeListener) { this.mOnLetterChangeListener = mOnLetterChangeListener; } PRivate OnLetterChangeListener mOnLetterChangeListener; interface OnLetterChangeListener { void onLetterChange(String letter); }

七:一般可以在onSizeChanged()方法中去拿到控件的寬高,并做處理

@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { //每一個(gè)字母單元格的高度 ceilHeight = h * 1.0f / LETTERS.length; //每一個(gè)字母單元格的寬度 ceilWidth = w; }

八:在觸摸的時(shí)候讓listView跟隨滾動(dòng),可以先獲取到listview滾動(dòng)到的位置,然后listView.setSelection(position);

qiv.setOnLetterChangeListener(new QuickIndexerView.OnLetterChangeListener() { @Override public void onLetterChange(String letter) { //找到listview需要滾動(dòng)到的位置 for (int i = 0; i < haoHanArrayList.size(); i++) { if (letter.equals(haoHanArrayList.get(i).getFirstLetter())) { listView.setSelection(i); tv_header.setText(haoHanArrayList.get(i).getFirstLetter()); break; } } }});

九:listview的懸浮標(biāo)題通常可以用表頭布局覆蓋在listview頂部,然后在OnScrollListener中去修改值

listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { tv_header.setText(haoHanArrayList.get(firstVisibleItem).getFirstLetter()); }});

十:在listview的Adapter的getview方法中,如果有需要比較上下兩個(gè)條目,可以把第一條分開來

if(position == 0) {}else{}

這樣不容易數(shù)組越界

十一:移除handler之前的延時(shí)操作:mHandler.removeCallbacksAndMessages(null);


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁远县| 五指山市| 健康| 河西区| 濮阳县| 扎赉特旗| 景德镇市| 营口市| 都兰县| 浦北县| 南丰县| 邹城市| 手游| 双城市| 子长县| 东乡| 星子县| 凤阳县| 阜新市| 民乐县| 新龙县| 宣汉县| 罗平县| 邵阳县| 孟津县| 新营市| 宁强县| 星子县| 阳山县| 根河市| 潍坊市| 武冈市| 昂仁县| 乌鲁木齐县| 姜堰市| 江都市| 通江县| 潞城市| 城口县| 龙江县| 利津县|