@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0; i < mDatas.size(); i++) { if (i == selectorPosition) { mPaint.setColor(Color.GREEN); canvas.drawCircle(mWidth / 2, i * mTextHeight + mTextHeight / 2 - dip2px(1), dip2px(8), mCirclePaint); } else { mPaint.setColor(Color.WHITE); } mPaint.setTextSize(dip2px(15)); mFontMetrics = mPaint.getFontMetrics(); canvas.drawText(mDatas.get(i), mWidth / 2, i * mTextHeight + mTextHeight / 2 + mFontMetrics.bottom, mPaint); } }
public LetterNavigationView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); }
/** * @param position */ public void setSelectorPosition(int position) { selectorPosition = position; invalidate(); }
mNavigationView.setData(mLetterDatas = getNavigationDatas()); mNavigationView.setOnTouchListener(new LetterNavigationView.OnTouchListener() { @Override public void onTouchListener(String str, boolean hideEnable) {
@Override public boolean onTouchEvent(MotionEvent event) { int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: changePosition(y); break; case MotionEvent.ACTION_MOVE: changePosition(y); break; case MotionEvent.ACTION_UP: if (mOnTouchListener != null) { mOnTouchListener.onTouchListener(mDatas.get(selectorPosition), true); } break; } return true; }
for (int i = 0; i < mLetterDatas.size(); i++) { if (tvLetterStr.equals(mLetterDatas.get(i))) { mNavigationView.setSelectorPosition(i); break;
/** * @param y */ private void changePosition(int y) { selectorPosition = y / (mHeight / mDatas.size()); if (selectorPosition >= mDatas.size()) { selectorPosition = mDatas.size() - 1; } else if (selectorPosition <= 0) { selectorPosition = 0; } if (mOnTouchListener != null) { mOnTouchListener.onTouchListener(mDatas.get(selectorPosition), false); } invalidate(); }