android中RecyclerView的简单使用(二),2024历年网易跳动Android面试真题解析

ViewHolder viewHolder = new MyViewHolder(view);

return viewHolder;

}

class MyViewHolder extends ViewHolder {

TextView textView;

public MyViewHolder(View view) {

super(view);

textView = (TextView) view.findViewById(R.id.tview);

}

}

}

class MyDecor extends ItemDecoration {

//定义一个水平和竖直常量

private final int Horization = RecyclerView.HORIZONTAL;

private final int Vertical = RecyclerView.VERTICAL;

//创建一个int型的数组,在数组中存放android中自带的分割线

private int [] attrs = {android.R.attr.listDivider};

//声明一个图片对象

private Drawable drawable;

//声明一个RecyclerView的方向

private int oritation;

public MyDecor (Context context,int orization){

TypedArray array = context.obtainStyledAttributes(attrs);

drawable = array.getDrawable(0);

//让这个属性重复使用

array.recycle();

//判断方向

if (orization != Horization && orization != Vertical) {

//如果既不是水平又不是竖直的,抛出异常

throw new IllegalArgumentException(“没有该方向”);

}else {

oritation = orization;

}

}

@Override

public void onDraw(Canvas c, RecyclerView parent, State state) {

// TODO Auto-generated method stub

super.onDraw(c, parent, state);

if (oritation == Vertical) {

drawHor(c, parent);

}

}

@Override

@Deprecated

public void getItemOffsets(Rect outRect, int itemPosition,

RecyclerView parent) {

// TODO Auto-generated method stub

super.getItemOffsets(outRect, itemPosition, parent);

}

//新建一个方法,在水平方向画一条线

public void drawHor(Canvas canvas,RecyclerView recyclerView){

int left = recyclerView.getPaddingLeft();

int right = recyclerView.getWidth()-recyclerView.getPaddingRight();

int childCount = recyclerView.getChildCount();

for (int i = 0; i < childCount; i++) {

View child = recyclerView.getChildAt(i);

//获取item上view视图的参数对象

RecyclerView.LayoutParams params = (LayoutParams) child.getLayoutParams();

//根据参数对象获取参数值

int top =child.getBottom() + params.bottomMargin;

//设置bottom坐标

int bottom = top + drawable.getIntrinsicHeight();

drawable.setBounds(left, top, right, bottom);

//画到花板上

drawable.draw(canvas);

}

}

}

这个就是画分割线的方法,我在这里用了内部类的写法,但是不建议这种写法,这样写代码不仅繁杂,还不规范。

在mainactivity中就是进行一系列的查找控件和一些属性的设置,adapter其实和上一篇是一致的,重要的部分就是MyDecor类。

说到这个MyDecor类,就要说一下ItemDecoration

ItemDecoration该类为抽象类,官方目前并没有提供默认的实现类

里面封装了三个方法: (1)void getItemOffsets () (2)void onDraw () (3)void onDrawOver ()

onDraw方法先于drawChildren

onDrawOver在drawChildren之后,一般我们选择复写其中一个即可。

getItemOffsets 可以通过outRect.set()为每个Item设置一定的偏移量,主要用于绘制Decorator。

当我们调用mRecyclerView.addItemDecoration()方法添加decoration的时候,RecyclerView在绘制的时候,去会绘制decorator,即调用该类的onDraw和onDrawOver方法。

我们使用recyclerview的时候,如果没有设置显示条目的margin,或者padding的话,是没有分割线效果的。 那么除去使用margin或padding,其余的方法是用itemdecoration绘制分割线我们绘制分割线的时候通常会使用drawable去绘制,那个drawable是怎么得到的呢?

方法1:可以使用android自带的属性:android.R.attr.listDivider属性可以获得,那么获得drawable的方法是:

首先获得TypedArray对象,这个是存储属性的一个容器,得到方法是

context.obtainStyledAttributes(int类型数组)

private int[]mDrawableId={android.R.attr.listDivider};

TypedArray ta = mContext.obtainStyledAttributes(mDrawableId);

然后,在从这个属性容器中去得到对应得drawable得到方法是:

Drawable mDrawable=ta.getDrawable(0);

然后再通过重写ItemDecoration中的onDrawOver的方法去书写你的分割线即可。

我现在拿画横线来说,从上面这个图中,我们很容易就可以看到,我们画分隔线的位置,是在每一个Item的布局之间。

我们确定了画在哪里,那我们怎么确定画线的具体的坐标位置呢?也就是我们要确定:分隔线的left, top, right, Bottom. 在Adapter中,我们很容易通过parent(这个parent它其实就是我们能看到的部分)获取每一个childView: (1)left:parent.getPaddingLeft() (2)right: parent. getWidth()-parent.getPaddingRight(); (3)top : 就是红线的上面:我们通过ChildView.getBottom()来得到这个Item的底部的高度,也就是蓝线位置,蓝线和红线之间间距:就是这个Item布局文件的:layout_marginBottom, 然后top的位置就是两者之和。 (4)bttom: 就是top加上分隔线的高度:top+线高。

以上就是recyclerview设置分割线的介绍。

效果图如下:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

总结

【Android 详细知识点思维脑图(技能树)】

我个人是做Android开发,已经有十来年了,目前在某创业公司任职CTO兼系统架构师。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

最后,赠与大家一句话,共勉!

述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

[外链图片转存中…(img-PrB5SPVk-1711628045275)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

最后,赠与大家一句话,共勉!

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二级Python历年是指二级计算机技术与软件应用考试有关Python语言的考。这些目旨在检测考生对于Python语法和应用的掌握程度。 二级Python历年主要包括以下内容: 1. Python基础知识:目可能涉及到Python的基本语法、数据类型、运算符、控制语句等方面的知识。考生需要对这些基础知识有清晰的理解和掌握。 2. 函数和模块:考可能会要求考生定义函数,实现一些特定的功能。此外,还可能涉及到模块的导入和使用,考生需要熟悉Python标准库的一些常用模块。 3. 文件操作:目可能会要求考生对文件进行读写操作。考生需要了解文件的打开、读取、写入以及关闭等基本操作。 4. 异常处理:目可能会给出一些可能出错的代码片段,并要求考生对其进行异常处理。考生需要熟悉Python的异常处理机制,能够通过适当的方式处理可能出现的异常。 5. 数据结构和算法:考可能涉及到Python的常见数据结构,如列表、字典等的使用。此外,还可能要求考生使用适当的算法解决一些问。 参加考试前,考生可以通过复习历年来了解考试的目类型和难度。通过做,考生可以巩固基础知识,熟悉常用的Python语法和库函数的使用。在解答问时,建议考生要仔细阅读目,理清思路,合理利用已掌握的知识和技巧解决问。 总之,通过做二级Python历年可以提高考生解决实际问的能力,对考试也有一定的帮助。希望考生认准备,取得好成绩!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值