该篇文章从eoeAndroid搬迁过来的,原文地址:[Android实例] 侧边字母滑动检索控件
自定义侧边滑动检索控件,能根据A~Z字母进行检索,类似微信,通讯录右侧字母检索方式
主要代码:
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
// 获取焦点改变背景颜色
int height = getHeight();
int width = getWidth();
int sigleHeight = height / b.length;
for (int i = 0; i < b.length; i++) {
paint.setColor(Color.BLACK);
paint.setTypeface(Typeface.DEFAULT_BOLD);
paint.setAntiAlias(true);
paint.setTextSize(20);
// 选中状态
if (i == position) {
paint.setColor(Color.BLUE);
paint.setTextSize(30);
paint.setFakeBoldText(true);
}
// x坐标等于中间-字符串宽度的一半.
float xPos = width / 2 - paint.measureText(b[i]) / 2;
float yPos = sigleHeight * i + sigleHeight;
canvas.drawText(b[i], xPos, yPos, paint);
paint.reset();// 重置画笔
}
}
@SuppressWarnings("deprecation")
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
int action = event.getAction();
float y = event.getY() - getY();
int oldPosition = position;
// 点击y坐标所占总高度的比例*b数组的长度就等于点击b中的个数.
int c = 0;
if (y >= 0 && y <= getHeight()) {
c = (int) (y / getHeight() * b.length);
} else if (y > getHeight()) {
c = b.length - 1;
}
if (action == MotionEvent.ACTION_UP) {
setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
position = -1;
if (showChooseText != null) {
showChooseText.setVisibility(View.INVISIBLE);
}
} else {
setBackgroundDrawable(new ColorDrawable(Color.GRAY));
setBackgroundColor(Color.GRAY);
if (oldPosition != c) {
if (c >= 0 && c < b.length) {
if (onTouchingChangedListener != null) {
onTouchingChangedListener.onTouchingChanged(b[c]);
}
}
if (showChooseText != null) {
showChooseText.setText(b[c]);
showChooseText.setVisibility(View.VISIBLE);
}
position = c;
}
}
invalidate();
return true;
}
下载地址:项目代码