介绍
这篇文章主要介绍了Android如何实现带字母索引的侧边栏功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
之前已经用自定义观点做出如下这样一个效果了
这两天需要重新拿来使用,发现效果虽然做出来了,不过思路不太对,就重新参考写了一个,用法也更为简单了
首要的自然是需要继承视图绘制出侧边栏,并向外提供一个监听字母索引变化的方法
/* * *大敌;叶应是叶 ,*时间:2017/8/20 三十八分 ,*描述: ,*/public class  LetterIndexView extends View  { ,public interface OnTouchingLetterChangedListener  { void 才能onHit (String 信); void 才能;虚(); ,} ,private OnTouchingLetterChangedListener  touchingLetterChangedListener; ,private Paint 颜料; ,private boolean 冲击; ,private final  String [], letters =, {“↑”,,“A",,“B",,“C",,“D",,“E",,“F",,“G",,“H", ,,,我,,“J",,“K",,“L",,“M",,“N",,“O",,“P",,“Q",,“R",,“S",,“T",,“U", ,才能“V",,“W",,“X",,“Y",,“Z",,“#”;}; ,private final  int DEFAULT_WIDTH; ,public LetterIndexView (Context 上下文),{ 这才能(上下文,null); ,} ,public LetterIndexView (Context 上下文,@Nullable AttributeSet attrs), { 这才能(上下文,attrs,, 0); ,} ,public LetterIndexView (Context 上下文,@Nullable AttributeSet attrs,, int defStyleAttr), { 超级才能(上下文,attrs,, defStyleAttr); paint 才能=,new 油漆(); paint.setAntiAlias才能(真正的); paint.setTextAlign才能(Paint.Align.CENTER); paint.setColor才能(Color.parseColor (“# 565656“)); DEFAULT_WIDTH 才能=,dpToPx(上下文,,24); ,} ,@Override ,protected void  onMeasure (int widthMeasureSpec, int heightMeasureSpec), { setMeasuredDimension才能(getWidthSize (widthMeasureSpec), getDefaultSize (getSuggestedMinimumHeight (),, heightMeasureSpec)); ,} ,private int  getWidthSize (int widthMeasureSpec), { int 才能;widthMode =, MeasureSpec.getMode (widthMeasureSpec); int 才能;widthSize =, MeasureSpec.getSize (widthMeasureSpec); switch 才能;(widthMode), { ,,case MeasureSpec.AT_MOST:, { ,,,if (widthSize 祝辞=,DEFAULT_WIDTH), { ,,,,return DEFAULT_WIDTH; ,,,},{else ,,,,return widthSize; ,,,} ,,} ,,case MeasureSpec.EXACTLY:, { ,,,return widthSize; ,,} ,,case MeasureSpec.UNSPECIFIED: ,,默认值: ,,,return DEFAULT_WIDTH; ,,} ,} ,@Override ,public boolean  dispatchTouchEvent (MotionEvent 事件),{ switch 才能;(event.getAction ()), { ,,case MotionEvent.ACTION_DOWN: ,,,hit =,真的; ,,,onHit (event.getY ()); ,,,休息; ,,case MotionEvent.ACTION_MOVE: ,,,onHit (event.getY ()); ,,,休息; ,,case MotionEvent.ACTION_UP: ,,case MotionEvent.ACTION_CANCEL: ,,,hit =,假; ,,,if (touchingLetterChangedListener !=, null), { ,,,,touchingLetterChangedListener.onCancel (); ,,,} ,,,休息; ,,} 无效才能(); return 才能;真实; ,} ,@Override ,protected void  onDraw (Canvas 画布),{ if 才能;(打击),{ ,,//字母索引条背景色 ,,canvas.drawColor (Color.parseColor (“# bababa")); ,,} float 才能;letterHeight =,((浮动),获得()),/,letters.length; float 才能;width =, getWidth (); float 才能;textSize =, letterHeight *, 5,/, 7; paint.setTextSize才能(textSize); for 才能;(int 小姐:=,0;,小姐:& lt;, letters.length;,我+ +),{ null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullAndroid如何实现带字母索引的侧边栏功能