老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

Android如何實現(xiàn)帶字母索引的側(cè)邊欄功能

這篇文章主要介紹了Android如何實現(xiàn)帶字母索引的側(cè)邊欄功能,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)公司是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的十多年時間我們累計服務(wù)了上千家以及全國政企客戶,如會所設(shè)計等企業(yè)單位,完善的項目管理流程,嚴(yán)格把控項目進度與質(zhì)量監(jiān)控加上過硬的技術(shù)實力獲得客戶的一致贊賞。

之前已經(jīng)用自定義View做出如下這樣一個效果了

Android如何實現(xiàn)帶字母索引的側(cè)邊欄功能

這兩天需要重新拿來使用,發(fā)現(xiàn)效果雖然做出來了,不過思路不太對,就重新參考寫了一個,用法也更為簡單了

首要的自然是需要繼承View繪制出側(cè)邊欄,并向外提供一個監(jiān)聽字母索引變化的方法

/**
 * 作者:葉應(yīng)是葉
 * 時間:2017/8/20 11:38
 * 描述:
 */
public class LetterIndexView extends View {
 public interface OnTouchingLetterChangedListener {
  void onHit(String letter);
  void onCancel();
 }
 private OnTouchingLetterChangedListener touchingLetterChangedListener;
 private Paint paint;
 private boolean hit;
 private final String[] letters = {"↑", "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 final int DEFAULT_WIDTH;
 public LetterIndexView(Context context) {
  this(context, null);
 }
 public LetterIndexView(Context context, @Nullable AttributeSet attrs) {
  this(context, attrs, 0);
 }
 public LetterIndexView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  paint = new Paint();
  paint.setAntiAlias(true);
  paint.setTextAlign(Paint.Align.CENTER);
  paint.setColor(Color.parseColor("#565656"));
  DEFAULT_WIDTH = dpToPx(context, 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:
   default:
    return DEFAULT_WIDTH;
  }
 }
 @Override
 public boolean dispatchTouchEvent(MotionEvent event) {
  switch (event.getAction()) {
   case MotionEvent.ACTION_DOWN:
    hit = true;
    onHit(event.getY());
    break;
   case MotionEvent.ACTION_MOVE:
    onHit(event.getY());
    break;
   case MotionEvent.ACTION_UP:
   case MotionEvent.ACTION_CANCEL:
    hit = false;
    if (touchingLetterChangedListener != null) {
     touchingLetterChangedListener.onCancel();
    }
    break;
  }
  invalidate();
  return true;
 }
 @Override
 protected void onDraw(Canvas canvas) {
  if (hit) {
   //字母索引條背景色
   canvas.drawColor(Color.parseColor("#bababa"));
  }
  float letterHeight = ((float) getHeight()) / letters.length;
  float width = getWidth();
  float textSize = letterHeight * 5 / 7;
  paint.setTextSize(textSize);
  for (int i = 0; i < letters.length; i++) {
   canvas.drawText(letters[i], width / 2, letterHeight * i + textSize, paint);
  }
 }
 private void onHit(float offset) {
  if (hit && touchingLetterChangedListener != null) {
   int index = (int) (offset / getHeight() * letters.length);
   index = Math.max(index, 0);
   index = Math.min(index, letters.length - 1);
   touchingLetterChangedListener.onHit(letters[index]);
  }
 }
 public void setOnTouchingLetterChangedListener(OnTouchingLetterChangedListener onTouchingLetterChangedListener) {
  this.touchingLetterChangedListener = onTouchingLetterChangedListener;
 }
 private int dpToPx(Context context, float dpValue) {
  float scale = context.getResources().getDisplayMetrics().density;
  return (int) (dpValue * scale + 0.5f);
 }
}

在側(cè)邊欄時,中間會顯示當(dāng)前滑動指向的字母,這其實是一個TextView,在主布局文件中添加,通過IndexControl來控制TextView的可見性,并指示ListView滑動到指定項

/**
 * 作者:葉應(yīng)是葉
 * 時間:2017/8/20 11:39
 * 描述:
 */
public class IndexControl {
 private final ListView listView;
 private final TextView tv_hint;
 private final Map letterMap;
 public IndexControl(ListView contactsListView, LetterIndexView letterIndexView,
      TextView tv_hint, Map letterMap) {
  this.listView = contactsListView;
  this.tv_hint = tv_hint;
  this.letterMap = letterMap;
  letterIndexView.setOnTouchingLetterChangedListener(new LetterChangedListener());
 }
 private class LetterChangedListener implements LetterIndexView.OnTouchingLetterChangedListener {
  @Override
  public void onHit(String letter) {
   tv_hint.setVisibility(View.VISIBLE);
   tv_hint.setText(letter);
   int index = -1;
   if ("↑".equals(letter)) {
    index = 0;
   } else if (letterMap.containsKey(letter)) {
    index = letterMap.get(letter);
   }
   if (index < 0) {
    return;
   }
   index += listView.getHeaderViewsCount();
   if (index >= 0 && index < listView.getCount()) {
    listView.setSelectionFromTop(index, 0);
   }
  }
  @Override
  public void onCancel() {
   tv_hint.setVisibility(View.INVISIBLE);
  }
 }
}

Android是什么

Android是一種基于Linux內(nèi)核的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機和平板電腦,由美國Google公司和開放手機聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Android如何實現(xiàn)帶字母索引的側(cè)邊欄功能”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!


文章名稱:Android如何實現(xiàn)帶字母索引的側(cè)邊欄功能
轉(zhuǎn)載注明:http://www.xueling.net.cn/article/piceis.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 色噜噜品一区二区三区孕妇 | 亚洲激情四射视频中文字幕久久 | 日韩中文欧美 | 野花视频最新免费完整在线观看 | 日日摸夜夜添夜夜无码区 | 亚洲精品免费av | 伊人丁香五月婷婷综合激情四射网 | 18毛片 | 中文字幕人妻丝袜成熟乱 | se吧提供在线看片免费人成久网 | 极品尤物一区二区三区 | 久久久久亚洲精品男人的天堂 | 寂寞人妻瑜伽被教练日 | 国产一三区A片在线播放 | 91色精品视频在线 | 特片网av | 久久久久国产亚洲AV麻豆 | 久久一区二区三区免费 | 欧美日韩免费一久久亚洲色WWW成人小说 | 亚洲日韩高清aⅴ在线观看 四区在线观看 | 女女互磨互喷水高潮les呻吟 | 成年免费无码动漫AV片在线观看 | 亚洲综合无码一区二区三区 | 丰满少妇又爽又紧又丰满在线观看 | 欧美激情小视频 | 一边捏奶头一边高潮视频 | 免费一级黄色大片 | 韩国理伦伦片在线观看 | 亚洲精品视频一二三 | 亚洲一区二区三区四区的 | 国产迷晕暴力玩弄网站 | 少妇被粗大猛进进出出 | 香蕉免费网站 | 免费人成在线观看视频无码 | 久久99精品国产麻豆婷婷小说 | 国产日产亚洲系列最新 | 在线免费看黄av | 在线免费观看视频一区二区 | 亚洲综合在线播放 | 欧美国产亚洲精品 | 日韩av无码一区二区三区不卡毛片 |