@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN | MotionEvent.ACTION_MOVE:
float y = event.getY();
//关键点===得到咱们按下的是那个索引(字母)
int index = (int) (y / wordHeight);
touchIndex = index;
//防止数组越界
if (listener != null && 0 <= touchIndex && touchIndex <= words.length - 1) {
//回调按下的字母
listener.wordsChange(words[touchIndex]);
invalidate();
if (mTextDialog != null) {
mTextDialog.setText(words[index]);
mTextDialog.setVisibility(View.VISIBLE);
}
}
break;
case MotionEvent.ACTION_UP:
touchIndex = -1;
invalidate();
if (mTextDialog != null) {
mTextDialog.setVisibility(View.GONE);
}
break;
}
return true;
}
/*手指按下了哪一个字母的回调接口*/
public interface onWordsChangeListener {
void wordsChange(String words);
}
三.listview列表:将汉字转为拼音排序
List mSortList = new ArrayList();
for (int i = 0; i < date.length; i++) {
Person sortModel = new Person();
sortModel.setName(date[i]);
//汉字转换成拼音
String pinyin = characterParser.getSelling(date[i]);
String sortString = pinyin.substring(0, 1).toUpperCase();
// 正则表达式,判断首字母是不是英文字母
if (sortString.matches("[A-Z]")) {
sortModel.setLetter(sortString.toUpperCase());
} else {
sortModel.setLetter("#");
}
mSortList.add(sortModel);
}