精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

安卓當下最流行的吸頂效果的實現(下)

移動開發 Android
今天接著上次讓我使用ItemDecoration來完成可推動的懸浮導航欄的效果。

接上文

***步:首先我們來寫一個類,它起標記的作用,來放每一個item的對應的懸浮欄的字符串

  1. public class NameBean {   
  2.     String name;   
  3.    
  4.     public String getName() {   
  5.         return name;   
  6.     }   
  7.    
  8.     public void setName(String name) {   
  9.         this.name = name;   
  10.     }   

 

第二步:自定義一個SectionDecoration 類 繼承 RecyclerView的ItemDecoration

  1. public class SectionDecoration extends RecyclerView.ItemDecoration {   
  2.     private static final String TAG = "SectionDecoration";   
  3.    
  4.     private List<NameBean> dataList;   
  5.    
  6.     private DecorationCallback callback;   
  7.     private TextPaint textPaint;   
  8.     private Paint paint;   
  9.     private int topGap;   
  10.     private int alignBottom;   
  11.     private Paint.FontMetrics fontMetrics;   
  12.    
  13.    
  14.     public SectionDecoration(List<NameBean> dataList, Context context, DecorationCallback decorationCallback) {   
  15.         Resources res = context.getResources();   
  16.         this.dataList = dataList;   
  17.         this.callback = decorationCallback;   
  18.         //設置懸浮欄的畫筆---paint   
  19.         paint = new Paint();   
  20.         paint.setColor(res.getColor(R.color.colorGray));   
  21.    
  22.         //設置懸浮欄中文本的畫筆   
  23.         textPaint = new TextPaint();   
  24.         textPaint.setAntiAlias(true);   
  25.         textPaint.setTextSize(DensityUtil.dip2px(context, 14));   
  26.         textPaint.setColor(Color.DKGRAY);   
  27.         textPaint.setTextAlign(Paint.Align.LEFT);   
  28.         fontMetrics = new Paint.FontMetrics();   
  29.         //決定懸浮欄的高度等   
  30.         topGap = res.getDimensionPixelSize(R.dimen.sectioned_top);   
  31.         //決定文本的顯示位置等   
  32.         alignBottom = res.getDimensionPixelSize(R.dimen.sectioned_alignBottom);   
  33.     }   
  34.    
  35.     @Override   
  36.     public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {   
  37.         super.getItemOffsets(outRect, view, parent, state);   
  38.         int pos = parent.getChildAdapterPosition(view);   
  39.         Log.i(TAG, "getItemOffsets:" + pos);   
  40.         String groupId = callback.getGroupId(pos);   
  41.         if (groupId.equals("-1")) return;   
  42.         //只有是同一組的***個才顯示懸浮欄   
  43.         if (pos == 0 || isFirstInGroup(pos)) {   
  44.             outRect.top = topGap;   
  45.             if (dataList.get(pos).getName() == "") {   
  46.                 outRect.top = 0;   
  47.             }   
  48.         } else {   
  49.             outRect.top = 0;   
  50.         }   
  51.     }   
  52.    
  53.     @Override   
  54.     public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {   
  55.         super.onDraw(c, parent, state);   
  56.         int left = parent.getPaddingLeft();   
  57.         int right = parent.getWidth() - parent.getPaddingRight();   
  58.         int childCount = parent.getChildCount();   
  59.         for (int i = 0; i < childCount; i++) {   
  60.             View view = parent.getChildAt(i);   
  61.             int position = parent.getChildAdapterPosition(view);   
  62.             String groupId = callback.getGroupId(position);   
  63.             if (groupId.equals("-1")) return;   
  64.             String textLine = callback.getGroupFirstLine(position).toUpperCase();   
  65.             if (textLine == "") {   
  66.                 float top = view.getTop();   
  67.                 float bottom = view.getTop();   
  68.                 c.drawRect(lefttopright, bottom, paint);   
  69.                 return;   
  70.             } else {   
  71.                 if (position == 0 || isFirstInGroup(position)) {   
  72.                     float top = view.getTop() - topGap;   
  73.                     float bottom = view.getTop();   
  74.                     //繪制懸浮欄   
  75.                     c.drawRect(lefttop - topGap, right, bottom, paint);   
  76.                     //繪制文本   
  77.                     c.drawText(textLine, left, bottom, textPaint);   
  78.                 }   
  79.             }   
  80.         }   
  81.     }   
  82.    
  83.     @Override   
  84.     public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {   
  85.         super.onDrawOver(c, parent, state);   
  86.         int itemCount = state.getItemCount();   
  87.         int childCount = parent.getChildCount();   
  88.         int left = parent.getPaddingLeft();   
  89.         int right = parent.getWidth() - parent.getPaddingRight();   
  90.         float lineHeight = textPaint.getTextSize() + fontMetrics.descent;   
  91.    
  92.         String preGroupId = "";   
  93.         String groupId = "-1";   
  94.         for (int i = 0; i < childCount; i++) {   
  95.             View view = parent.getChildAt(i);   
  96.             int position = parent.getChildAdapterPosition(view);   
  97.    
  98.             preGroupId = groupId;   
  99.             groupId = callback.getGroupId(position);   
  100.             if (groupId.equals("-1") || groupId.equals(preGroupId)) continue;   
  101.    
  102.             String textLine = callback.getGroupFirstLine(position).toUpperCase();   
  103.             if (TextUtils.isEmpty(textLine)) continue;   
  104.    
  105.             int viewBottom = view.getBottom();   
  106.             float textY = Math.max(topGap, view.getTop());   
  107.             //下一個和當前不一樣移動當前   
  108.             if (position + 1 < itemCount) {   
  109.                 String nextGroupId = callback.getGroupId(position + 1);   
  110.                 //組內***一個view進入了header   
  111.                 if (nextGroupId != groupId && viewBottom < textY) {   
  112.                     textY = viewBottom;   
  113.                 }   
  114.             }   
  115.             //textY - topGap決定了懸浮欄繪制的高度和位置   
  116.             c.drawRect(left, textY - topGap, right, textY, paint);   
  117.             //left+2*alignBottom 決定了文本往左偏移的多少(加-->向左移)   
  118.             //textY-alignBottom  決定了文本往右偏移的多少  (減-->向上移)   
  119.             c.drawText(textLine, left + 2 * alignBottom, textY - alignBottom, textPaint);   
  120.         }   
  121.     }   
  122.    
  123.    
  124.     /** 
  125.      * 判斷是不是組中的***個位置 
  126.      * 
  127.      * @param pos 
  128.      * @return 
  129.      */   
  130.     private boolean isFirstInGroup(int pos) {   
  131.         if (pos == 0) {   
  132.             return true;   
  133.         } else {   
  134.             // 因為是根據 字符串內容的相同與否 來判斷是不是同意組的,所以此處的標記id 要是String類型   
  135.             // 如果你只是做聯系人列表,懸浮框里顯示的只是一個字母,則標記id直接用 int 類型就行了   
  136.             String prevGroupId = callback.getGroupId(pos - 1);   
  137.             String groupId = callback.getGroupId(pos);   
  138.             //判斷前一個字符串 與 當前字符串 是否相同   
  139.             if (prevGroupId.equals(groupId)) {   
  140.                 return false;   
  141.             } else {   
  142.                 return true;   
  143.             }   
  144.         }   
  145.     }   
  146.    
  147.     //定義一個借口方便外界的調用   
  148.     interface DecorationCallback {   
  149.         String getGroupId(int position);   
  150.    
  151.         String getGroupFirstLine(int position);   
  152.     }   

 

第三步:在向list集合中先把每一個item的 起“標記”作用的字符串都加進去

  1. setPullAction(comingslist); 
  1. private void setPullAction(List<WaitMVBean.DataBean.ComingBean> comingslist) {   
  2.         dataList = new ArrayList<>();   
  3.    
  4.         for (int i = 0; i < comingslist.size(); i++) {   
  5.             NameBean nameBean = new NameBean();   
  6.             String name0 = comingslist.get(i).getComingTitle();   
  7.             nameBean.setName(name0);   
  8.             dataList.add(nameBean);   
  9.         }   
  10.     } 

 

第四步:在setAdapter() 前,為RecyclerView添加ItemDecoration:

  1. recyclerView.addItemDecoration(new SectionDecoration(dataList,mContext, new SectionDecoration.DecorationCallback() {   
  2.                //返回標記id (即每一項對應的標志性的字符串)   
  3.                 @Override   
  4.                 public String getGroupId(int position) {   
  5.                     if(dataList.get(position).getName()!=null) {   
  6.                         return dataList.get(position).getName();   
  7.                     }   
  8.                     return "-1";   
  9.                 }   
  10.    
  11.                 //獲取同組中的***個內容   
  12.                 @Override   
  13.                 public String getGroupFirstLine(int position) {   
  14.                     if(dataList.get(position).getName()!=null) {   
  15.                         return dataList.get(position).getName();   
  16.                     }   
  17.                     return "";   
  18.                 }   
  19.             })); 

 

這樣就完成了~

再看一眼最終效果感受一下:

責任編輯:龐桂玉 來源: 安卓開發精選
相關推薦

2017-01-13 11:10:41

Android吸頂效果開發

2022-07-28 14:33:32

webviewweb頁面

2023-10-11 08:14:43

iPhoneTabs標簽頁

2020-08-19 10:22:45

CIOIT試點項目技術

2011-05-03 10:40:58

Ubuntu 11.0應用

2014-02-04 19:44:23

編程語言開發

2014-02-19 10:34:48

JavaScript代碼規范

2018-01-31 11:10:21

安卓操作系統手機屏幕

2011-01-04 18:04:49

PHP

2021-07-13 06:51:16

H5web開發吸頂

2011-03-21 13:01:10

2010-07-20 09:49:07

分布式文件系統

2017-07-14 14:50:00

架構框架前端

2013-11-11 11:34:56

UbuntuLinux發行版Unity

2021-07-28 14:25:01

編程語言開發JavaScript

2018-03-13 09:34:30

人工智能編程語言Python

2023-03-31 11:21:10

網絡協議LoRaWAN

2017-06-27 14:02:09

前端框架Bootstrap

2016-10-21 17:13:16

開發Java

2011-03-23 10:50:21

LAMPWeb開發
點贊
收藏

51CTO技術棧公眾號

一区二区不卡在线视频 午夜欧美不卡在| 秋霞午夜鲁丝一区二区老狼| 亚洲精品美女在线| 无码日韩人妻精品久久蜜桃| 免费黄网站在线播放| 国产精品中文字幕一区二区三区| 97在线视频免费观看| 国产男女猛烈无遮挡a片漫画| 日韩av电影资源网| 亚洲国产中文字幕在线视频综合| 日本午夜一区二区三区| av网站在线免费看| 视频一区在线视频| 久久久久久久国产精品| 免费黄色国产视频| 亚洲人成网www| 欧美成人高清电影在线| 中国黄色片免费看| 英国三级经典在线观看| 一区二区三区加勒比av| 亚洲成人第一| 青青免费在线视频| 成人精品一区二区三区四区| 国产精品一区专区欧美日韩| 国产精品黄色大片| 国产一区亚洲| 久久精品国产欧美亚洲人人爽| 野花社区视频在线观看| 伊人久久亚洲| 欧美一卡2卡3卡4卡| 国产三级日本三级在线播放| 日韩av一卡| 亚洲午夜视频在线观看| 欧美少妇在线观看| 麻豆视频在线免费观看| 国产农村妇女毛片精品久久麻豆 | www.亚洲一二| 欧美一二区视频| 五月天av在线播放| 国产黄色一区| 欧美色老头old∨ideo| av动漫免费看| 久久sese| 色综合色综合色综合色综合色综合| 日韩中文字幕在线免费| av在线小说| 亚洲亚洲精品在线观看| 福利视频免费在线观看| 暧暧视频在线免费观看| 亚洲国产aⅴ天堂久久| wwwwww欧美| 牛牛精品在线视频| 亚洲国产精品久久久久秋霞影院 | 亚洲精品一区在线观看| 精品国产午夜福利在线观看| 日韩一级淫片| 精品久久久久久久人人人人传媒| 三大队在线观看| 北条麻妃一区二区三区在线| 精品av久久707| 国产麻豆剧传媒精品国产av| 六月丁香久久丫| 精品视频在线播放免| 右手影院亚洲欧美| 精品日韩免费| 久久精品国产亚洲| 精品无码久久久久久久| 亚洲经典在线| 国产精品成人一区二区| 亚洲天堂中文在线| 国产大陆a不卡| 国产日韩精品推荐| 国产尤物视频在线| 综合久久国产九一剧情麻豆| 免费看黄色a级片| 2020国产在线| 欧美在线视频你懂得| 久久久九九九热| 久久porn| 中文字幕亚洲无线码在线一区| 三上悠亚在线观看视频| 国产精品jizz在线观看美国| 欧美一级淫片aaaaaaa视频| jizz国产在线| 国产91丝袜在线观看| 欧美一区二区福利| wwwav在线| 一本久道久久综合中文字幕| 想看黄色一级片| 国产精品tv| 中文字幕精品网| 国产亚洲自拍av| 青青国产91久久久久久| 99久久自偷自偷国产精品不卡| 日韩成人黄色| 亚洲视频在线一区观看| 精品一区二区中文字幕| 伊人亚洲精品| 亚洲毛茸茸少妇高潮呻吟| 国产天堂av在线| 美女国产一区| 国产精品免费一区二区三区观看| 国产中文字幕在线播放| 亚洲综合丁香婷婷六月香| 国产又大又黄又粗的视频| 99精品国产一区二区三区2021| 亚洲午夜色婷婷在线| 久久精品国产亚洲av高清色欲| 日本在线不卡视频一二三区| 国产视色精品亚洲一区二区| 欧美日本一道| 在线观看欧美日本| 99re久久精品国产| 欧美+日本+国产+在线a∨观看| 国产97色在线|日韩| 国精产品乱码一区一区三区四区| 国产婷婷一区二区| 免费看的黄色大片| 成人av激情人伦小说| 久久精品青青大伊人av| 国产精品午夜一区二区| 99精品视频一区二区| 国产日韩第一页| 成人亚洲视频| 国产一区二区美女视频| 国产九色在线播放九色| 国产毛片精品一区| 五月天男人天堂| 成人全视频在线观看在线播放高清 | 日本高清视频免费看| 亚洲少妇中出一区| 中文字幕在线观看日| 成人在线一区| 国产精品高精视频免费| 精品美女视频在线观看免费软件| 精品久久久精品| a天堂视频在线观看| 国产精品九九| 国产亚洲欧美一区二区| 精品精品导航| 精品国产一区a| 久久亚洲av午夜福利精品一区| 国产福利一区在线| 人妻无码一区二区三区四区| 中文字幕亚洲在线观看 | 一区国产精品| 四虎国产精品免费久久| 久久精品2019中文字幕| 国产伦精品一区二区三区视频痴汉| 国产精品网站在线观看| 天堂视频免费看| 国产精品久久久乱弄| 成人激情视频在线| 怡红院av在线| 亚洲国产小视频| 国产专区第一页| 久久久99免费| 欧美午夜aaaaaa免费视频| 日韩av在线播放网址| 成人精品一区二区三区| 四虎影视成人| 亚洲精品国产成人| 无码人妻丰满熟妇精品 | 一本色道久久综合亚洲精品婷婷 | 成人免费视频一区| 免费观看美女裸体网站| 自拍偷拍精品| 国产欧美婷婷中文| 午夜在线激情影院| 日韩国产欧美精品在线| 91丨九色丨海角社区| 自拍偷拍亚洲综合| 无码人妻精品一区二区三| 亚洲综合精品四区| 亚洲一卡二卡| 成人在线视频你懂的| 日产精品久久久一区二区福利| 阿v免费在线观看| 日韩午夜精品电影| 国产成人无码一区二区在线播放| 国产精品久久久久影院老司| 无码人妻一区二区三区在线| 模特精品在线| 好吊色视频988gao在线观看| 婷婷亚洲成人| 成人精品在线观看| 九色porny自拍视频在线观看 | 中文字幕无码日韩专区免费| www.日韩大片| 国产福利精品一区二区三区| 亚洲国产午夜| 伊人情人网综合| 日韩在线麻豆| 亚洲精品日产aⅴ| 国产精品一区二区av影院萌芽| 久久这里有精品| 韩日在线视频| 亚洲第一二三四五区| 亚洲天堂网在线视频| 日韩欧美国产激情| 国产黄色片在线免费观看| 国产嫩草影院久久久久| 免费不卡的av| 国内欧美视频一区二区| 性生交免费视频| 亚洲在线播放| 欧美久久久久久久久久久久久久| 成人激情电影在线| 另类欧美小说| 成人av综合网| av蓝导航精品导航| 精品视频在线一区| 国产在线观看一区二区三区 | 亚洲最大av网| 欧美成人福利| 日本精品va在线观看| 成人三级小说| 九九热精品视频在线播放| a√在线中文网新版址在线| 亚洲精品一区二区三区不| 亚洲第一色网站| 91精品国产色综合久久不卡电影| 久久这里只有精品9| 欧美视频中文在线看| 国产稀缺真实呦乱在线| 一区二区免费在线播放| 亚洲色婷婷一区二区三区| 亚洲欧美日韩中文播放| 五月天婷婷丁香网| 欧美激情综合在线| 美女被到爽高潮视频| 久久男人中文字幕资源站| 国产成人精品无码片区在线| 成人污污视频在线观看| 亚洲精品久久一区二区三区777 | 精品人伦一区二区| 久久精品亚洲精品国产欧美| 亚洲天堂视频一区| 久久综合九色综合97婷婷女人 | 亚洲一级二级在线| 九九热精彩视频| 亚洲一区二区在线观看视频| 国产一级一级片| 亚洲成人一区二区| 国产成人精品亚洲男人的天堂| 亚洲国产成人porn| 久久99精品波多结衣一区| 日韩欧美在线国产| 黑人精品无码一区二区三区AV| 色婷婷国产精品| 日韩不卡高清视频| 欧美老年两性高潮| 国产喷水吹潮视频www| 日韩欧美卡一卡二| 日本高清视频www| 亚洲日本成人女熟在线观看 | 国产日产精品一区二区三区四区的观看方式| 久久久国产精品一区二区三区| 美国十次av导航亚洲入口| 久久久久网址| 日韩大片在线播放| 日韩 欧美 自拍| 亚洲天堂激情| 成年人观看网站| 麻豆国产精品官网| 国内自拍偷拍视频| 91在线视频网址| 网爆门在线观看| 亚洲一区二区在线观看视频| 亚洲欧美一二三区| 91麻豆精品国产综合久久久久久| www.天堂av.com| 国产偷亚洲偷欧美偷精品| 成人网视频在线观看| 精品自在线视频| 欧美人体一区二区三区| 成人天堂噜噜噜| 欧美激情久久久久久久久久久| 日韩电影大全在线观看| 牛牛国产精品| 成年人在线看片| 国内精品自线一区二区三区视频| 中文文字幕文字幕高清| 国产精品三级视频| 福利一区二区三区四区| 欧美日韩精品免费观看视频 | 中文字幕一精品亚洲无线一区 | 亚洲aⅴ怡春院| 亚洲视频在线观看免费视频| 亚洲成年人在线| 日本中文字幕在线2020| 欧美亚洲日本网站| 99国内精品久久久久| 欧美大香线蕉线伊人久久国产精品 | 成人av色网站| 激情久久av| 国产精品成人a在线观看| 欧美在线观看成人| 国产精品中文字幕日韩精品| 日本爱爱爱视频| 精品动漫一区二区| av官网在线观看| 色小说视频一区| www.成人爱| 国产另类第一区| 国产高清一区| 久久久久久久片| 2019国产精品| 国产在线观看99| 91精品欧美久久久久久动漫| 国产大学生校花援交在线播放| 91国语精品自产拍在线观看性色 | 欧美日本韩国在线| 亚洲激情综合| 蜜臀av粉嫩av懂色av| 亚洲女爱视频在线| 国产又粗又长又黄| 尤物yw午夜国产精品视频明星| 色一区二区三区| 成人羞羞视频免费| 中文字幕一区二区三区久久网站| 一个色综合久久| 国产精品视频麻豆| 亚洲精品国产精品乱码视色| 亚洲美女又黄又爽在线观看| 国产免费拔擦拔擦8x在线播放 | 91精品91| 最新天堂中文在线| 亚洲国产电影在线观看| 国产亚洲欧美日韩高清| 亚洲一级黄色av| 欧美人与性动交xxⅹxx| 欧美在线视频二区| 香蕉久久夜色精品国产| 免费成人深夜夜行p站| 五月天欧美精品| 天天色综合久久| 91成人国产在线观看| 欧美交a欧美精品喷水| av之家在线观看| 99国产精品视频免费观看| 久久精品一二区| 亚洲人成自拍网站| 成人综合网站| 午夜啪啪免费视频| 国产另类ts人妖一区二区| 国产成人av免费在线观看| 91精品欧美综合在线观看最新| 91福利国产在线观看菠萝蜜| 成人三级在线| 亚洲视频大全| 妺妺窝人体色WWW精品| 欧美在线999| 高清全集视频免费在线| 97神马电影| 一区二区毛片| 性欧美一区二区| 7777精品伊人久久久大香线蕉| 日韩av官网| 乱一区二区三区在线播放| 日韩国产在线一| 日韩激情小视频| 亚洲成人动漫在线播放| 玛雅亚洲电影| 在线观看免费91| 粉嫩13p一区二区三区| 国产又粗又爽视频| 色婷婷综合成人av| 麻豆国产一区二区三区四区| 青青青在线视频播放| 久久久精品天堂| 国产乱色精品成人免费视频| 欧美黑人狂野猛交老妇| 久久爱www成人| 中文字幕第10页| 欧美性xxxxx极品娇小| 在线观看完整版免费| 99re在线观看视频| 久久久亚洲一区| 永久看片925tv| 亚洲欧洲成视频免费观看| 不卡精品视频| 成年人免费在线播放| 亚洲三级在线免费观看| 天堂av电影在线观看| 91免费精品国偷自产在线| 国产精品毛片在线| 欧美激情精品久久久久久免费| 亚洲韩国日本中文字幕| 日韩欧美专区| 日韩av黄色网址| 亚洲精品日产精品乱码不卡| 精品av中文字幕在线毛片| 91九色对白| 日韩和欧美一区二区| 天堂网一区二区三区| 欧美成人手机在线| 日韩欧美自拍| 野外性满足hd| 亚洲国产成人久久综合一区|