package com.sxit.dreamiya.utils;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;
public class AssortView extends Button {
public interface OnTouchAssortListener {
public void onTouchAssortListener(String s);
public void onTouchAssortUP();
}
public AssortView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public AssortView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public AssortView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
// 分类
private String[] assort = { "?", "#", "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 Paint paint = new Paint();
// 选择的索引
private int selectIndex = -1;
// 字母监听器
private OnTouchAssortListener onTouch;
public void setOnTouchAssortListener(OnTouchAssortListener onTouch) {
this.onTouch = onTouch;
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
int height = getHeight();
int width = getWidth();
int interval = height / assort.length;
for (int i = 0, length = assort.length; i < length; i++) {
// 抗锯齿
paint.setAntiAlias(true);
// 默认粗体
paint.setTypeface(Typeface.DEFAULT_BOLD);
// 白色
paint.setColor(Color.DKGRAY);
paint.setTextSize(30);
if (i == selectIndex) {
// 被选择的字母改变颜色和粗体
paint.setColor(Color.parseColor("#3399ff"));
paint.setFakeBoldText(true);
paint.setTextSize(40);
}
// 计算字母的X坐标
float xPos = width / 2 - paint.measureText(assort[i]) / 2;
// 计算字母的Y坐标
float yPos = interval * i + interval;
canvas.drawText(assort[i], xPos, yPos, paint);
paint.reset();
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
float y = event.getY();
int index = (int) (y / getHeight() * assort.length);
if (index >= 0 && index < assort.length) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
// 如果滑动改变
if (selectIndex != index) {
selectIndex = index;
if (onTouch != null) {
onTouch.onTouchAssortListener(assort[selectIndex]);
}
}
break;
case MotionEvent.ACTION_DOWN:
selectIndex = index;
if (onTouch != null) {
onTouch.onTouchAssortListener(assort[selectIndex]);
}
break;
case MotionEvent.ACTION_UP:
if (onTouch != null) {
onTouch.onTouchAssortUP();
}
selectIndex = -1;
break;
}
} else {
selectIndex = -1;
if (onTouch != null) {
onTouch.onTouchAssortUP();
}
}
invalidate();
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
}