当前位置: 首页 > news >正文

做网站注意的问题/百度免费发布信息网站

做网站注意的问题,百度免费发布信息网站,公司申请网站建设申请理由,局域网网站建设教程一、 摘要 本文介绍使用RecyclerView的抽象内部类ItemDecoration实现ItemView分割线的绘制。 二、 方法分析 实现分割线的绘制,需要重写两个方法:getItemOffsets()和onDraw()。 1. ItemDecoration.getItemOffsets public void getItemOffsets(NonNull…

一、 摘要

本文介绍使用RecyclerView的抽象内部类ItemDecoration实现ItemView分割线的绘制。


二、 方法分析

实现分割线的绘制,需要重写两个方法:getItemOffsets()和onDraw()。

1. ItemDecoration.getItemOffsets

public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state)

看方法名,获取item的偏移量,outRect是item的偏移量矩形区域,对其设置四个方向的值,便起到设置该item在四个方向上的偏移量的作用,这个偏移量的实际效果,是扩展item本身的区域,例如:

outRect.set(0, 0, 0, 1);

该代码的效果是让这个item的bottom位置空出1dp的高度。

获取当前item对应位置的方法:

int position = parent.getChildAdapterPosition(view);

2. ItemDecoration.onDraw

public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state)

这个方法就是具体的绘制操作了,该方法中,我们应该和上一个方法保持一致,在位置相对应时才去绘制canvas,我们需要通过遍历parent来获取每个item对应的位置:

for (int i = 0; i < parent.getChildCount(); i++) {View view = parent.getChildAt(i);int position = parent.getChildAdapterPosition(view);// TODO draw canvas
}

3. RecyclerView.addItemDecoration

public void addItemDecoration(@NonNull ItemDecoration decor)

对RecyclerView添加一个Item装饰器


4. RecyclerView.invalidateItemDecorations

public void invalidateItemDecorations()

刷新item装饰器,该方法内部会调用装饰器的getItemOffsets()和onDraw()方法。


三、 示例

假设现在我们的需求是:有一个垂直方向的RecyclerView,在指定位置item的底部加上一条1dp高的分割线:

先自定义一个ItemDecoration:

public class DemoItemDecoration extends RecyclerView.ItemDecoration {private final static int DIVIDE_HEIGHT = 1;private Context mContext;private Paint mPaint;private int mDividerPosition;public DemoItemDecoration(Context context) {mContext = context;mPaint = new Paint();mPaint.setColor(Color.BLACK);}public void setPosition(int position) {mDividerPosition = position;}@Overridepublic void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {super.getItemOffsets(outRect, view, parent, state);int position = parent.getChildAdapterPosition(view);if (position == mDividerPosition) {outRect.set(0, 0, 0, dip2px(DIVIDE_HEIGHT));}}@Overridepublic void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {super.onDraw(canvas, parent, state);for (int i = 0; i < parent.getChildCount(); i++) {View view = parent.getChildAt(i);int position = parent.getChildAdapterPosition(view);if (position == mDividerPosition) {drawDivider(canvas, view);return;}}}/*** 在{@link #getItemOffsets}中,我们已经让item底部空出了1dp的位置,现在我们要在这1dp高的区域内填充,实现分割线** @param canvas* @param view*/private void drawDivider(Canvas canvas, View view) {int left = view.getLeft();int right = view.getRight();int top = view.getBottom();int bottom = top + dip2px(DIVIDE_HEIGHT);canvas.drawRect(left, top, right, bottom, mPaint);}private int dip2px(int dip) {float density = mContext.getResources().getDisplayMetrics().density;return (int) (dip * density + 0.5f);}
}

然后将这个装饰器应用于RecyclerView上:

private RecyclerView mRecyclerView;
private DemoItemDecoration mItemDecoration;private void initView(){mRecyclerView = findViewById(R.id.rvDemo);mItemDecoration = new DemoItemDecoration(this);mRecyclerView.addItemDecoration(mItemDecoration);
}private void updateView(int position){mItemDecoration.setPosition(position);mRecyclerView.invalidateItemDecorations();
}

四、 总结

在学会使用Item装饰器之前,我们想实现在RecyclerView中插入分割线,可能得定义一个ViewHolder,然后在Adapter中进行适配,如今我们可以利用装饰器更加优雅地实现这个功能。同理,我们可以在Item的顶部加上组名进行分组,比如实现一个联系人列表,组名是大写首字母。

http://www.jmfq.cn/news/5231215.html

相关文章:

  • 石林彝族网站建设/济南网络营销外包
  • fuzzz的wordpress模板/seo品牌优化整站优化
  • 外文网站字体/9个广州seo推广神技
  • 男女性直接做的视频网站/爱站工具包怎么使用
  • 销售网站内容设计/关键词优化排名怎么做
  • 西安微网站开发/百度在线识别图片
  • 设计网站登录框ps怎么做/湖南百度推广
  • 网站怎么做视频背景/搜索引擎营销的方法包括
  • 金坛市住房和城乡建设局网站/竞价托管怎么做
  • 做哪种网站能赚到钱/软文营销实施背景
  • 网站打不开 别的电脑能打开/新闻软文怎么写
  • 百度网站推广优化工具/东莞整站优化排名
  • 用建站ABC做的网站 怎么营销/私人做网站建设
  • 定制化开发/aso优化什么意思
  • 电子商务网站开发环境/广州seo运营
  • 法拍房北京网站/关键词挖掘ppt
  • 手机可做兼职的网站/青岛网站seo
  • 网站建设服务描述/一键优化是什么意思
  • 网站建设分为多少模块/微信信息流广告投放
  • 临沂网站建设兼职/百度com打开
  • 济南学习网站制作/宁波核心关键词seo收费
  • 网站开发技术主管工作职责/我想做地推怎么找渠道
  • 自己做物流网站/长沙网站托管优化
  • 公司简历模板范文填写/seo关键词排名优化软件
  • 北京网站优化和推广/成都搜索优化排名公司
  • 做爰全过程免费网站的视频教程/品牌策划案
  • 重庆城市建设集团官方网站/引流软件有哪些
  • 不属于常用网站建设的是/老铁外链
  • 深圳宝安网站建设/网络营销是做什么
  • 深圳市住房和建设局工程交易网/seo推广的方法