Android如何实现带字母索引的侧边栏功能

  介绍

这篇文章主要介绍了Android如何实现带字母索引的侧边栏功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

之前已经用自定义观点做出如下这样一个效果了

 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   null

Android如何实现带字母索引的侧边栏功能