SideBar 仿微信联系人侧边栏界面搜索Viwe

来源:互联网 发布:淘宝店铺转化率是什么 编辑:程序博客网 时间:2024/05/18 22:44

需要做了一个仿微信侧边烂搜索界面的View,这种简单的控件如果去github上的话,很麻烦,所以就自己写了一个,代码很简单,不多说,上代码

public class SideBar extends View {    private String[] mTexts = new String[]{            "#", "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 mCommonPaint;    private int mChoose = -1;    private Paint mChoosePaint;    private GestureDetector mGestureDetector;    private int mTextHeight;    public SideBar(Context context) {        super(context);        init();    }    public SideBar(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);        init();    }    public SideBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }    private void init() {        mCommonPaint = new Paint();        mCommonPaint.setAntiAlias(true); //抗锯齿        mCommonPaint.setTextSize(ScreenUtil.dip2px(10));        mCommonPaint.setColor(Color.parseColor("#888888"));        mCommonPaint.setTypeface(Typeface.MONOSPACE); //设置字体        mChoosePaint = new Paint();        mChoosePaint.setAntiAlias(true);        mChoosePaint.setTextSize(ScreenUtil.dip2px(10));        mChoosePaint.setColor(Color.parseColor("#333333"));        mChoosePaint.setTypeface(Typeface.MONOSPACE);        mGestureDetector = new GestureDetector(getContext(), mOnGestureListener);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        for (int i = 0; i < mTexts.length; i++) {            String text = mTexts[i];            float x = getMeasuredWidth() / 2 - mCommonPaint.measureText(text) / 2; //measureText测量字体大小            if (mChoose == i) {                canvas.drawText(text, x, i * mTextHeight + mTextHeight + getPaddingTop(), mChoosePaint);            } else {                canvas.drawText(text, x, i * mTextHeight + mTextHeight + getPaddingTop(), mCommonPaint);            }        }    }    private GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener() {        @Override        public boolean onSingleTapUp(MotionEvent e) {            int y = (int) e.getY() - getPaddingTop();            mChoose = y / mTextHeight;            invalidate();            if (mOnSideChooseListening != null) {                mOnSideChooseListening.onChooseListener(mChoose, mTexts[mChoose]);            }            return super.onSingleTapUp(e);        }    };    @Override    public boolean onTouchEvent(MotionEvent event) {        mGestureDetector.onTouchEvent(event);        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                setBackgroundColor(Color.parseColor("#88888888"));                break;            case MotionEvent.ACTION_UP:                setBackgroundColor(Color.TRANSPARENT);                break;        }        return true;    }    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);        //需要考虑padding        mTextHeight = (getMeasuredHeight() - getPaddingTop() - getPaddingBottom()) / mTexts.length;     }    public void setTextSize(int size) {        mCommonPaint.setTextSize(size);        mChoosePaint.setTextSize(size);    }    public interface OnSideChooseListening {        void onChooseListener(int choose, String text);    }    private OnSideChooseListening mOnSideChooseListening;    public void setOnSideChooseListening(OnSideChooseListening onSideChooseListening) {        mOnSideChooseListening = onSideChooseListening;    }}
阅读全文
0 0
原创粉丝点击