public class LetterSortView extends View
{
/**
* 触摸监听
*/
private OnTouchLetterChangedListener mOnTouchLetterChangedListener;
/**
* 字母顺序
*/
private static final String[] LETTERS = { "A", "B", "C", "D", "E", "F",
"G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S",
"T", "U", "V", "W", "X", "Y", "Z" };
/**
* 当前索引位置
*/
private int mChoose = -1;
/**
* 画笔
*/
private Paint mPaint = new Paint();
/**
* 是否显示背景
*/
private boolean mShowBkg = false;
/**
* 构造函数
*
* @param context
* 上下文
* @param attrs
* xml中属性
* @param defStyle
* 风格
*/
public LetterSortView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
/**
* 构造函数
*
* @param context
* 上下文
* @param attrs
* xml中属性
*
*/
public LetterSortView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
/**
* 构造函数
*
* @param context
* 上下文
*/
public LetterSortView(Context context)
{
super(context);
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
/*if (mShowBkg)
{
canvas.drawColor(Color.parseColor("#40000000"));
}*/
int height = getHeight();
int width = getWidth();
int singleHeight = height / LETTERS.length;
for (int i = 0; i < LETTERS.length; i++)
{
//mPaint.setColor(Color.WHITE);
mPaint.setColor(Color.parseColor("#5e5b6f"));
mPaint.setTextSize(22.0f);
mPaint.setTypeface(Typeface.DEFAULT_BOLD);
mPaint.setAntiAlias(true);
if (i == mChoose)
{
mPaint.setColor(Color.parseColor("#3399ff"));
mPaint.setFakeBoldText(true);
}
float xPos = width / 2 - mPaint.measureText(LETTERS[i]) / 2 - 3.5f;
float yPos = singleHeight * i + singleHeight;
canvas.drawText(LETTERS[i], xPos, yPos, mPaint);
mPaint.reset();
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent event)
{
setBackgroundResource(R.drawable.bm_friendtab_searchbg);
final int action = event.getAction();
final float y = event.getY();
final int oldmChoose = mChoose;
final OnTouchLetterChangedListener listener = mOnTouchLetterChangedListener;
final int c = (int) (y / getHeight() * LETTERS.length);
switch (action)
{
case MotionEvent.ACTION_DOWN:
mShowBkg = true;
if (oldmChoose != c && listener != null)
{
if (c >= 0 && c < LETTERS.length)
{
listener.onTouchingLetterChanged(LETTERS[c]);
mChoose = c;
invalidate();
}
}
break;
case MotionEvent.ACTION_MOVE:
if (oldmChoose != c && listener != null)
{
if (c >= 0 && c < LETTERS.length)
{
listener.onTouchingLetterChanged(LETTERS[c]);
mChoose = c;
invalidate();
}
}
break;
case MotionEvent.ACTION_UP:
mShowBkg = false;
mChoose = -1;
invalidate();
setBackgroundDrawable(null);
break;
default:
break;
}
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
return super.onTouchEvent(event);
}
/**
* 设置字母改变时候的监听器 <功能详细描述>
*
* @param onTouchingLetterChangedListener
* 监听器
* @see [类、类#方法、类#成员]
*/
public void setOnTouchLetterChangedListener(
OnTouchLetterChangedListener onTouchingLetterChangedListener)
{
this.mOnTouchLetterChangedListener = onTouchingLetterChangedListener;
}
/**
*
* 字母改变时候的接口 <功能详细描述>
*
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public interface OnTouchLetterChangedListener
{
/**
* 改变字母时的触发动作 <功能详细描述>
*
* @param string
* 字母
* @see [类、类#方法、类#成员]
*/
public void onTouchingLetterChanged(String string);
}
}