文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在Android中利用itemdecoration实现一个时间线效果

2023-06-06 12:41

关注

今天就跟大家聊聊有关如何在Android中利用itemdecoration实现一个时间线效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

代码如下:

// 时间线装饰器public class TimeLineDecoration extends RecyclerView.ItemDecoration {  private Paint mPaint;  public TimeLineDecoration() {    mPaint = new Paint();    mPaint.setStyle(Paint.Style.FILL);    mPaint.setColor(Color.BLUE);    mPaint.setStrokeWidth(5);  }  @Override  public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {    super.onDraw(c, parent, state);    RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();    // 这里的childcount为可见item的个数。 与item的个数不一定相同。    int childCount = parent.getChildCount();    for (int i = 0; i < childCount; i++) {      View child = parent.getChildAt(i);      // 避免硬编码,这里通过代码获取在getItemOffsets方法中设置的宽度      int leftDecoWidth = layoutManager.getLeftDecorationWidth(child);      // 根据position获取当前的数据,然后根据数据状态绘制不同的形状      int position = parent.getChildAdapterPosition(child);      int cx = leftDecoWidth / 2;      int cy = child.getTop() + child.getHeight() / 2;      int radius = 20;      if (position == 2) {        c.drawRect(cx - radius, cy - radius, cx + radius, cy + radius, mPaint);      } else if (position == 4) {        // 绘制外圈为空心圆,内圈为实心圆        mPaint.setStyle(Paint.Style.STROKE);        c.drawCircle(cx, cy, radius, mPaint);        mPaint.setStyle(Paint.Style.FILL);        c.drawCircle(cx, cy, radius >> 1, mPaint);      } else {        c.drawCircle(cx, cy, radius, mPaint);      }      // 绘制item中间的连接线,第一个item与最后一个item的连接线需单独处理一下。      if (position == 0) {        c.drawLine(cx, cy + mPaint.getStrokeWidth() + radius, cx, child.getBottom(), mPaint);      } else if (position == parent.getAdapter().getItemCount() - 1) {        c.drawLine(cx, child.getTop(), cx, cy - mPaint.getStrokeWidth() - radius, mPaint);      } else {        c.drawLine(cx, cy + mPaint.getStrokeWidth() + radius, cx, child.getBottom(), mPaint);        c.drawLine(cx, child.getTop(), cx, cy - mPaint.getStrokeWidth() - radius, mPaint);      }    }  }  @Override  public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {    super.onDrawOver(c, parent, state);    // 不受outRect设置的范围影响,可以绘制在item上。  }  @Override  public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {    super.getItemOffsets(outRect, view, parent, state);    // 在item左边留下100像素的空间。 item的布局会在减掉这100像素后处理。    outRect.left = 100;  }}

然后将该itemdecoration设置到recyclerview上。

RecyclerAdapter adapter = new RecyclerAdapter(this, data);mRecyclerView.setLayoutManager(new LinearLayoutManager(this));mRecyclerView.addItemDecoration(new TimeLineDecoration());mRecyclerView.setAdapter(adapter);

看完上述内容,你们对如何在Android中利用itemdecoration实现一个时间线效果有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯