1 package com.example.administrator.yunstore.widget; 2 3 import android.content.Context; 4 import android.graphics.Canvas; 5 import android.graphics.Color; 6 import android.graphics.Paint; 7 import android.graphics.Typeface; 8 import android.util.AttributeSet; 9 import android.view.MotionEvent; 10 import android.widget.Button; 11 12 /** 13 * Created by Administrator on 2016/10/19. 14 * 自定义的一个字母button 15 */ 16 17 public class LetterButton extends Button { 18 19 // 分类字母 20 private String[] assort = { "A", "B", "C", "D", "E", "F", "G", 21 "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", 22 "U", "V", "W", "X", "Y", "Z" }; 23 24 private Paint paint = new Paint(); 25 26 private int selectIndex = -1; 27 28 public LetterButton(Context context) { 29 super(context); 30 } 31 32 public LetterButton(Context context, AttributeSet attrs) { 33 super(context, attrs); 34 } 35 36 public LetterButton(Context context, AttributeSet attrs, int defStyleAttr) { 37 super(context, attrs, defStyleAttr); 38 } 39 40 /** 41 * @param canvas 42 * 对按钮进行绘制 43 */ 44 @Override 45 protected void onDraw(Canvas canvas) { 46 super.onDraw(canvas); 47 48 int height=getHeight(); 49 int width=getWidth(); 50 int interval = height / assort.length; 51 52 for (int i = 0, length = assort.length; i < length; i++) { 53 // 抗锯齿 54 paint.setAntiAlias(true); 55 // 默认粗体 56 paint.setTypeface(Typeface.DEFAULT_BOLD); 57 // 白色 58 paint.setColor(Color.BLUE); 59 if (i == selectIndex) { 60 // 被选择的字母改变颜色和粗体 61 paint.setColor(Color.parseColor("#33bb99")); 62 paint.setFakeBoldText(true); 63 paint.setTextSize(30); 64 } 65 // 计算字母的X坐标 66 float xPos = width / 2 - paint.measureText(assort[i]) / 2; 67 // 计算字母的Y坐标 68 float yPos = interval * i + interval; 69 canvas.drawText(assort[i], xPos, yPos, paint); 70 paint.reset(); 71 } 72 } 73 74 @Override 75 public boolean dispatchTouchEvent(MotionEvent event) { 76 float y = event.getY(); 77 int index = (int) (y / getHeight() * assort.length); 78 if (index >= 0 && index < assort.length) { 79 80 switch (event.getAction()) { 81 case MotionEvent.ACTION_MOVE: 82 // 如果滑动改变 83 if (selectIndex != index) { 84 selectIndex = index; 85 if (onTouch != null) { 86 onTouch.onTouchAssortListener(assort[selectIndex]); 87 } 88 89 } 90 break; 91 case MotionEvent.ACTION_DOWN: 92 selectIndex = index; 93 if (onTouch != null) { 94 onTouch.onTouchAssortListener(assort[selectIndex]); 95 } 96 97 break; 98 case MotionEvent.ACTION_UP: 99 if (onTouch != null) { 100 onTouch.onTouchAssortUP(); 101 } 102 selectIndex = -1; 103 break; 104 } 105 } else { 106 selectIndex = -1; 107 if (onTouch != null) { 108 onTouch.onTouchAssortUP(); 109 } 110 } 111 invalidate(); 112 113 return true; 114 } 115 116 @Override 117 public boolean onTouchEvent(MotionEvent event) { 118 return super.onTouchEvent(event); 119 } 120 //字母监听器 121 private OnTouchAssortListener onTouch; 122 123 public interface OnTouchAssortListener { 124 void onTouchAssortListener(String s); 125 void onTouchAssortUP(); 126 } 127 128 129 public void setOnTouchAssortListener(OnTouchAssortListener onTouch) { 130 this.onTouch = onTouch; 131 } 132 }
时间: 2024-10-04 18:30:40