Android-recycleview-分割线彩蛋

我收集了一些学习用的材料,其中蕴含了很多学习,面试,中高进阶fluuter材料,还有很多视频详解,如果有同学想进一步理解,详情请看文末。也欢送各路大神门前来装X。

首先上问题

怎么做?

当咱们空余工夫的时候,须要有外遇

实现

首先上问题

这是一个用 recycleview做的垂直列表,在列表的最底部,是紧贴屏幕的底部,然而咱们须要留出肯定的空间来解决,这样看来失常点。

怎么做?

比方在最初一种item的底部预留了一个高度50dp的view,adapter在bind数据的时候,依据position判断是否须要显示这个通明的50dp的view。这个操作是能够的,我以前也是这样做过。如同不太优雅,(管他呢,先把成果做进去了再说)

当咱们空余工夫的时候,须要有外遇

明天无心中在想,这样的一个底部view,也是属于一个item吧,能够这样了解。又想起了康师傅的ItemDecoration教程,具体视频地址找不到了(请原谅我),也就是咱们能够在最初一个item的最初,画一条分割线,然而它是通明的分割线,这样就能够把底部的内容,顶上来了。1)如果你想用margin,padding来解决这个成果,是不美观的,底部会空出一块区域,不显示内容的。2)如同也想不出其余方法了。

实现

咱们能够了解后面所有的分割线,都不画进去,就画最初一条

@Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { //我的的drawable对象 if (mDivider == null) { //这个偏移量是0 outRect.set(0, 0, 0, 0); return; } if (mOrientation == VERTICAL) { //解决垂直方向,获取最初一个item的position int lastPosition = state.getItemCount() – 1; //以后item的position int position = parent.getChildAdapterPosition(view); //当他大于等于最初一个的时候,其实不会呈现大于的状况的 if (position >= lastPosition) { //把偏移量设置成咱们drawable的高度 outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); } else { //除了最初一个分割线有高度,其余分割线高度都是0 outRect.set(0, 0, 0, 0); } } else { //能够不思考程度方向,同理的 } }

下面是偏移最初一个,到咱们再看看draw办法

@Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { if (parent.getLayoutManager() == null || mDivider == null) { return; } if (mOrientation == VERTICAL) { drawVertical(c, parent, state); } else { //咱们不须要程度方向的,能够不写这个,当然也能够写 } }

private void drawVertical(Canvas canvas, RecyclerView parent, RecyclerView.State state) { canvas.save(); final int left; final int right; if (parent.getClipToPadding()) { left = parent.getPaddingLeft(); right = parent.getWidth() – parent.getPaddingRight(); canvas.clipRect(left, parent.getPaddingTop(), right, parent.getHeight() – parent.getPaddingBottom()); } else { left = 0; right = parent.getWidth(); }

final int childCount = parent.getChildCount(); final int lastPosition = state.getItemCount() – 1; for (int i = 0; i= lastPosition) { parent.getDecoratedBoundsWithMargins(child, mBounds); final int bottom = mBounds.bottom + Math.round(child.getTranslationY()); final int top = bottom – mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(canvas); } } canvas.restore(); }

drawable设置及喜爱的色彩,我这里须要通明,那就是#00000000. 以上

https://shimo.im/docs/dYkqrQcyr98jPKYX/ 《android学习面试fulutter进阶材料收费获取》,可复制链接后用石墨文档 App 或小程序关上。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据