|
package com.electric.chargingpile.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
public class MyLetterView extends View {
private Paint mPaint;
private boolean isShowBg = false;// 用于区分是否显示view的背景
private OnSlidingListener mOnSlidingListener;// 滑动此View的监听器
private int choose = -1;// 用于标记当前所选中的位置
private TextView mTvDialog;//用于接受从activity中传过来的,中间用于展示字母的textView
//需要展示的数据
private String[] letter = {"定位", "最近", "热门", "全部", "A", "B", "C", "D",
"E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q",
"R", "S", "T", "W", "X", "Y", "Z"};
public MyLetterView(Context context) {
super(context);
}
public MyLetterView(Context context, AttributeSet attrs) {
super(context, attrs);
initPaint();
}
public MyLetterView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
private void initPaint() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(25);
mPaint.setColor(Color.parseColor("#8c8c8c"));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//当此View被按下时所显示的背景颜色
if (isShowBg) {
canvas.drawColor(Color.parseColor("#ffffff"));
}
//计算每个字符所占的高度
float singleHeight = getHeight() / letter.length;
int width = getWidth();
for (int i = 0; i < letter.length; i++) {
String text = letter[i];
float xPosition = width / 2 - mPaint.measureText(text) / 2;
float yPosition = singleHeight * i + singleHeight;
//通过不断的改变yPosition将数组中的数据一个一个绘制到自定义的View中
canvas.drawText(text, xPosition, yPosition, mPaint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
int position = (int) (event.getY() / getHeight() * letter.length);
int oldChoose = choose;
switch (action) {
case MotionEvent.ACTION_DOWN:
isShowBg = true;
if (oldChoose != position && mOnSlidingListener != null) {
if (position > 0 && position < letter.length) {
//将滑动到的字母传递到activity中
mOnSlidingListener.sliding(letter[position]);
choose = position;
if (mTvDialog != null) {
mTvDialog.setVisibility(View.VISIBLE);
mTvDialog.setText(letter[position]);
}
}
invalidate();
}
break;
case MotionEvent.ACTION_MOVE:
isShowBg = true;
if (oldChoose != position && mOnSlidingListener != null) {
if (position >= 0 && position < letter.length) {
mOnSlidingListener.sliding(letter[position]);
choose = position;
if (mTvDialog != null) {
mTvDialog.setVisibility(View.VISIBLE);
mTvDialog.setText(letter[position]);
}
}
invalidate();
}
break;
case MotionEvent.ACTION_UP:
isShowBg = false;
choose = -1;
if (mTvDialog != null) {
mTvDialog.setVisibility(View.GONE);
}
invalidate();
break;
}
return true;
}
//MyLetterView的一个滑动的监听
public void setOnSlidingListener(OnSlidingListener mOnSlidingListener) {
this.mOnSlidingListener = mOnSlidingListener;
}
public interface OnSlidingListener {
public void sliding(String str);
}
public void setTextView(TextView tvDialog) {
mTvDialog = tvDialog;
}
}
|