GT 安卓應用開發之好友快速索引

2021-08-21 19:13:46 字數 3528 閱讀 9817

今天,分享乙個利用側邊字元索引欄進行檢索的方法:

step1,好友列表排序

我們假定已經獲得了好友列表,只不過從後台獲取的資料是亂序的,需要我們手動對其進行排序

在定義user的時候需要定義乙個首字母,可以利用pinyin4j實現,具體**如下:

if (name != null&&!name.equals(""))  else 

firstletter = pinyin.substring(0, 1).touppercase(); // 獲取拼音首字母並轉成大寫

if (!firstletter.matches("[a-z]"))

定義比較規則如下:

@override

public int compareto(user another) else if (!firstletter.equals("#") && another.getfirstletter().equals("#")) else

}

step2,資料渲染

好友列表排序之後,需要利用介面卡將其渲染至listview,具體**比較簡單,這裡就不貼出來了

step3,定義索引欄

定義乙個sidebar類繼承textview,並重新處理事件邏輯和重寫繪製方法,整個類的**如下:

public class sidebar extends textview ;

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

}

step4,事件處理

**如下:

sidebar.setonstrselectcallback(new sidebar.isidebarselectcallback() }}

});

GT 安卓應用開發之個性撥號

前言 一改歷史慣例,先附上原始碼位址個性撥號 該程式由上部分的號碼展示與下邊的撥號盤兩部分組成,比較簡單在原始碼中也有就不在這裡展示了 下面一起看一下撥號和回退鍵的邏輯實現 1,撥號 撥號的實現其實就是呼叫的系統撥號,通過intent調起系統撥號程式intent intent new intent ...

GT 安卓應用開發之錯題率統計

前言 對於學生的答題 學習 情況,資料是直觀的表現,在實際開發中也需要涉及到大量的資料統計與分析,我們經常通過圖表結合來更加直觀的展現資料。接下來,記錄一下最近做的乙個錯題率統計與總成績排行。整個介面是由上半部分的柱形圖來展現錯題記錄,下半部分則是已提交 答題 人員的成績排名。主要涉及到的幾個點就是...

安卓移動應用開發考題 移動應用開發安卓選題

移動應用開發課程大作業選題 注意 以下所有系統均要實現 1 管理者的登陸 2 使用者的註冊和登陸 3 資料的儲存和提取 第 題可以不要求 1 管理者的登陸 和 2 使用者的註冊和登 陸 不要附上核心 全文漢字字數不少於 每個班內不能有重複選題,班級內部每 人組成一組選題。學生提交大作業設計報告列印稿...