今天,分享乙個利用側邊字元索引欄進行檢索的方法:
step1,好友列表排序
我們假定已經獲得了好友列表,只不過從後台獲取的資料是亂序的,需要我們手動對其進行排序
在定義user的時候需要定義乙個首字母,可以利用pinyin4j實現,具體**如下:
if (name != null&&!name.equals("")) else定義比較規則如下:firstletter = pinyin.substring(0, 1).touppercase(); // 獲取拼音首字母並轉成大寫
if (!firstletter.matches("[a-z]"))
@overridestep2,資料渲染public int compareto(user another) else if (!firstletter.equals("#") && another.getfirstletter().equals("#")) else
}
好友列表排序之後,需要利用介面卡將其渲染至listview,具體**比較簡單,這裡就不貼出來了
step3,定義索引欄
定義乙個sidebar類繼承textview,並重新處理事件邏輯和重寫繪製方法,整個類的**如下:
public class sidebar extends textview ;step4,事件處理private paint textpaint;
private paint bigtextpaint;
private paint scaletextpaint;
private canvas canvas;
private int itemh;
private int w;
private int h;
/*** 普通情況下字型大小
*/float singletexth;
/*** 縮放離原始的寬度
*/private float scalewidth;
/*** 滑動的y
*/private float eventy = 0;
/*** 縮放的倍數
*/private int scalesize = 1;
/*** 縮放個數item,即開口大小
*/private int scaleitemcount = 6;
private isidebarselectcallback callback;
public sidebar(context context)
public sidebar(context context, attributeset attrs)
public sidebar(context context, attributeset attrs, int defstyleattr)
private void init(attributeset attrs)
textpaint = new paint(paint.anti_alias_flag);
textpaint.setcolor(getcurrenttextcolor());
textpaint.settextsize(gettextsize());
textpaint.settextalign(paint.align.center);
bigtextpaint = new paint(paint.anti_alias_flag);
bigtextpaint.setcolor(getcurrenttextcolor());
bigtextpaint.settextsize(gettextsize() * (scalesize + 3));
bigtextpaint.settextalign(paint.align.center);
scaletextpaint = new paint(paint.anti_alias_flag);
scaletextpaint.setcolor(getcurrenttextcolor());
scaletextpaint.settextsize(gettextsize() * (scalesize + 1));
scaletextpaint.settextalign(paint.align.center);
}public void setdataresource(string data)
public void setonstrselectcallback(isidebarselectcallback callback)
/*** 設定字型縮放比例
** @param scale
*/public void setscalesize(int scale)
/*** 設定縮放字型的個數,即開口大小
** @param scaleitemcount
*/public void setscaleitemcount(int scaleitemcount)
private int dp(int px)
@override
public boolean ontouchevent(motionevent event) else
case motionevent.action_cancel:
eventy = 0;
invalidate();
return true;
case motionevent.action_up:
if (event.getx() > (w - getpaddingright() - singletexth - 10)) else
break;
}return super.ontouchevent(event);
}@override
protected void ondraw(canvas canvas)
private void drawview(float y)
//畫大的字母
paint.fontmetrics fontmetrics = bigtextpaint.getfontmetrics();
float bigtextsize = fontmetrics.descent - fontmetrics.ascent;
canvas.drawtext(letters[i], w - getpaddingright() - scalewidth - bigtextsize, singletexth + itemh * i, bigtextpaint);}}
}drawletters(y, currentselectindex);
}private void drawletters(float y, int index)
//觸控的時候畫縮放圖
} else }}
public inte***ce isidebarselectcallback
}
**如下:
sidebar.setonstrselectcallback(new sidebar.isidebarselectcallback() }}});
GT 安卓應用開發之個性撥號
前言 一改歷史慣例,先附上原始碼位址個性撥號 該程式由上部分的號碼展示與下邊的撥號盤兩部分組成,比較簡單在原始碼中也有就不在這裡展示了 下面一起看一下撥號和回退鍵的邏輯實現 1,撥號 撥號的實現其實就是呼叫的系統撥號,通過intent調起系統撥號程式intent intent new intent ...
GT 安卓應用開發之錯題率統計
前言 對於學生的答題 學習 情況,資料是直觀的表現,在實際開發中也需要涉及到大量的資料統計與分析,我們經常通過圖表結合來更加直觀的展現資料。接下來,記錄一下最近做的乙個錯題率統計與總成績排行。整個介面是由上半部分的柱形圖來展現錯題記錄,下半部分則是已提交 答題 人員的成績排名。主要涉及到的幾個點就是...
安卓移動應用開發考題 移動應用開發安卓選題
移動應用開發課程大作業選題 注意 以下所有系統均要實現 1 管理者的登陸 2 使用者的註冊和登陸 3 資料的儲存和提取 第 題可以不要求 1 管理者的登陸 和 2 使用者的註冊和登 陸 不要附上核心 全文漢字字數不少於 每個班內不能有重複選題,班級內部每 人組成一組選題。學生提交大作業設計報告列印稿...