Android RecyclerView使用ItemDecoration刻画时间线/时间轴/时光轴timeline

在Android开发中时间线/时间轴/时光轴现在很常见,尤其涉及到进度、物流信息、进展和时态发展的图表信息等,时间线/时间轴/时光轴生动表现这一类需求。
在RecyclerView的基础上,我使用ItemDecoration刻画一条在RecyclerView左侧的时间线/时间轴/时光轴。运行结果如图:

在顶部显示一张与众不同的icon,区别表示事件或者进展已经完成。
下面是代码。

RVActivity.java是本例运行的Activity:

package zhangphil.test;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import java.util.ArrayList;public class RVActivity extends AppCompatActivity {RecyclerViewAdapter mAdapter;private ArrayList<Integer> mItems;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.rv_activity);mItems = new ArrayList<>();for (int i = 0; i < 5; i++) {mItems.add(i);}RecyclerView mRecyclerView = findViewById(R.id.recycler_view);LinearLayoutManager layoutManager = new LinearLayoutManager(this);layoutManager.setOrientation(LinearLayoutManager.VERTICAL);mRecyclerView.setLayoutManager(layoutManager);mAdapter = new RecyclerViewAdapter();mRecyclerView.setAdapter(mAdapter);mRecyclerView.addItemDecoration(new RVItemDecoration(getApplicationContext()));}private class RecyclerViewAdapter extends RecyclerView.Adapter<MyVH> {@NonNull@Overridepublic MyVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.rv_item, parent, false);return new MyVH(view);}@Overridepublic void onBindViewHolder(@NonNull MyVH holder, int position) {holder.title.setText("时间:" + position);holder.content.setText("事件进度 -> " + mItems.get(position));holder.indicator_icon.setImageResource(position == 0 ? R.mipmap.ic_launcher : R.drawable.ic_launcher_background);}@Overridepublic int getItemCount() {return mItems.size();}}private class MyVH extends RecyclerView.ViewHolder {public TextView title;public TextView content;public ImageView indicator_icon;public MyVH(View itemView) {super(itemView);title = itemView.findViewById(R.id.title);content = itemView.findViewById(R.id.content);indicator_icon = itemView.findViewById(R.id.indicator_icon);}}private class RVItemDecoration extends RecyclerView.ItemDecoration {private Paint mPaint;public RVItemDecoration(Context context) {mPaint = new Paint();mPaint.setAntiAlias(true);mPaint.setStrokeWidth(2); //时间轴线的宽度。mPaint.setColor(Color.BLUE); //时间轴线的颜色。}@Overridepublic void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDraw(c, parent, state);int childCount = parent.getChildCount();for (int i = 0; i < childCount; i++) {View view = parent.getChildAt(i);//int index = parent.getChildAdapterPosition(view);float left = dip2px(getApplicationContext(), 14 + 10);float bottom = view.getBottom();c.drawLine(left, dip2px(getApplicationContext(), (50 - 20) / 2), left, bottom, mPaint);}}}public static int dip2px(Context context, float dpValue) {float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}
}

其中R.layout.rv_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recycler_view"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

其实就只有一个Android的RecyclerView。

RecyclerView的Adapter用到的item布局R.layout.rv_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:paddingLeft="14dp"android:paddingRight="14dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:id="@+id/indicator_icon"android:layout_width="20dp"android:layout_height="20dp"android:layout_gravity="center_vertical"android:scaleType="centerInside"android:src="@drawable/ic_launcher_background" /><TextViewandroid:id="@+id/title"android:layout_width="match_parent"android:layout_height="50dp"android:layout_marginLeft="10dp"android:background="@android:color/holo_blue_bright"android:gravity="left|center_vertical"android:text="时间"android:textColor="@android:color/white"android:textSize="26dp" /></LinearLayout><TextViewandroid:id="@+id/content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="6dp"android:layout_marginLeft="30dp"android:text="事件进度"android:textColor="@android:color/darker_gray"android:textSize="14dp" /></LinearLayout>

Android RecyclerView使用ItemDecoration刻画时间线/时间轴/时光轴timeline相关推荐

  1. Dorea.js框架介绍:纯CSS写出优雅好看的时间线/时间轴(左右垂直展示)

    在准备搭建博客,准备写一个心情的功能模块,以时间线的形式展现出来(有的人称为时间轴),发现Layer的提供的时间线挺好看的.速递地址:layui.但不是很符合本人自己的心意,想要一种左右左右展示的风格 ...

  2. R语言ggplot2可视化:使用ggplot2绘制按时间顺序排列的时间线图(chronological timeline plot)

    R语言ggplot2可视化:使用ggplot2绘制按时间顺序排列的时间线图(chronological timeline plot) 目录 R语言ggplot

  3. Vue3时间轴(Timeline)

    Vue2时间轴(Timeline) 可自定义设置以下属性: 时间轴内容数组(timelineData),必传,类型:Array<{desc: string, color?: string}> ...

  4. Hudi的核心概念 —— 时间轴(TimeLine)

    文章目录 时间轴(TimeLine) 时间轴(TimeLine) 就是一个时间线,它的每一个操作都记录在内,每一个时刻,你做了什么事情,对某一个时刻,记录一个时刻的数据 Hudi 的核心是维护表上在不 ...

  5. Vue时间轴(Timeline)

    自定义设置时间轴的宽度(width)和描述文本 效果图如下: ①创建时间轴组件Timeline.vue: <template><div class="m-timeline- ...

  6. 时间轴CSS Timeline

    下载地址 简约的时间轴CSS Timeline,垂直样式的时间轴效果,可以作为事件展示等用途. dd:

  7. Flutter时间轴(timeline)

    组件 在业务开发中经常会使用到timeline时间轴,来记录数据操作记录等,在这本人封装了一个相对较通用的时间轴组件. 示例 参数 参数 类型 必填 说明 timelineList List 是 时间 ...

  8. 推荐几款jQuery时间轴插件Timeline

    原文地址:http://blog.csdn.net/xiaokui_wingfly/article/details/51907045 查看原文 查看在线演示Demo和更多原文内容教程:  http:/ ...

  9. 【时间轴】推荐几款jQuery时间轴插件Timeline

    查看原文 查看在线演示Demo和更多原文内容教程: http://www.ibloger.net/article/1185.html 3D效果的响应式CSS3时间轴 CSS时间轴3D效果实例,一套基于 ...

  10. 【MarkDown】CSDN Markdown之时间轴图timeline详解

    文章目录 时间轴图 一个关于时间轴图的例子 语法 分组 长`时间段`或`事件文本`换行 `时间段`和`事件文本`样式 自定义颜色方案 主题 基础主题 森林主题 黑色主题 默认主题 中性主题 与库或网站 ...

最新文章

  1. ES6 你可能不知道的事 – 基础篇
  2. 掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地中篇
  3. 数字图像的加载、显示和输出
  4. 进程上下文与中断上下文
  5. 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 1.程序分析:(ab)?a:b这是条件运算符的基本例子。...
  6. 表单提交,以及标注。
  7. 问题之sqlyou的使用
  8. Guava翻译系列之EventBus
  9. 解决ufw下pptp客户端连接问题
  10. python中关于sklearn 0.18的错误—— cannot import name comb
  11. 【跃迁之路】【648天】程序员高效学习方法论探索系列(实验阶段405-2018.11.21)...
  12. PS图层批量处理插件,支持Win、Mac系统
  13. RFID EPC Class1 Gen2电子标签笔记
  14. sql数据库置疑解决办法
  15. java size属性_Java中的长度length、length()、size()
  16. NanoPi R2S 专用软件源
  17. 速营社怎么赚钱,可以当副业吗
  18. excel筛选情况下数字下拉递增的方法
  19. python 通达信公式函数_通达信zig函数的python实现
  20. Android传感器系列介绍-刘宇

热门文章

  1. spring boot中mybatisPlus代码生成器源码
  2. 三分钟教你如何做好网站备案
  3. 当我们在聊高可用时,我们其实在聊什么?
  4. python读取文件夹下所有图片并重命名_python 对文件夹下图片 批量重命名
  5. Android跳转应用市场更新自己《完美适配大部分手机应用商店》
  6. unity下载局域网内图片
  7. winrar 5.80正式版全球发布
  8. Web前端-HTML
  9. 递归算法之八皇后问题
  10. 靶机渗透日记 responder