Android RecyclerChart其它图表绘制示例详解

目录
  • 正文
    • 1. 心电图
    • 2. 睡眠图

正文

之前章节介绍了RecyclerChart 中一些通用的图表的相关绘制逻辑,本章节介绍两种Special的Chart的绘制,一种是心电图,一种是睡眠图。首先我们来看下心电图EcgChart的绘制。

1. 心电图

EcgChart 跟LineChart形态上是相似的,但是EcgChart的点相对于LineChart密集的多,之前的LineChart相当于每个RecyclerView的Itemview 中的Model对应的value值,而心电图的ItemDataModel背后有一个List的value值与之对应,针对1080px width的手机而言,极大可能地超出了1px一个Point,所以这里的绘制逻辑换成每个Item中对应一段path, path 是由ItemDataModel的List,注意处理前后两个Path的衔接处即可, 这里具体List的大小可根据需求来定,原始的每个Item中是20个Point。首先先看下横屏无线右滑的EcgChart动图gif:

绘制的逻辑代码, 因为每个ItemView的width也很小就没有像之前的LineChart单独处理边界的绘制问题了。

private <T extends BarEntry> void drawLineChartWithoutPoint(Canvas canvas, RecyclerView parent, YAxis mYAxis) {
  final float parentRightBoard = parent.getWidth() - parent.getPaddingRight();
  final float parentLeft = parent.getPaddingLeft();
  //BaseBarChartAdapter adapter = (BaseBarChartAdapter) parent.getAdapter();
  final int childCount = parent.getChildCount();
  for (int i = 0; i < childCount; i++) {
    View child = parent.getChildAt(i);
    T barEntry = (T) child.getTag();
    float preValue = Integer.MIN_VALUE;
    if (i > 0){
      View pointF1Child = parent.getChildAt(i - 1);
      T barEntryLeft = (T) pointF1Child.getTag();
      if (barEntryLeft instanceof  EcgEntry){
        List<Float> values = ((EcgEntry) barEntryLeft).values;
        if (values.size() > 0){
          preValue =  values.get(values.size() - 1);
        }
      }
    }
    if (barEntry instanceof EcgEntry){
      List<Float> values = ((EcgEntry) barEntry).values;
      RectF rectF = ChartComputeUtil.getBarChartRectF(child, parent,
                                                      mYAxis, mLineChartAttrs, barEntry);
      if (rectF.left < parentLeft || rectF.right > parentRightBoard){
        continue;
      }
      float innerItemWidth = rectF.width()/values.size();
      float startX = rectF.left;
      // preValue 用来衔接两个ItemView中的path,防止断连的问题。
      preValue = preValue == Integer.MIN_VALUE?values.get(0): preValue;
      float firstPosition = ChartComputeUtil.getYPosition(preValue, parent,
                                                          mYAxis, mLineChartAttrs);
      Path pathItem = new Path();
      pathItem.moveTo(startX, firstPosition);
      for (int j = 0; j < values.size(); j++) {
        float yPosition = ChartComputeUtil.getYPosition(values.get(j),
         parent, mYAxis, mLineChartAttrs);
        pathItem.lineTo(startX + j * innerItemWidth, yPosition );
      }
      canvas.drawPath(pathItem, mLineChartPaint);
    }
  }
}

EcgChart整体的绘制逻辑还是比较简单的, 这里的Entry对象也如上所述的包含一个List

public class EcgEntry extends BarEntry{
    public List<Float> values = new ArrayList<>();
    public EcgEntry(int i, float value, long timestamp, int type) {
        super(i, value, timestamp, type);
    }
}

2. 睡眠图

之前在MPChart的绘制中有介绍过睡眠泳道图的绘制,不同与之前的Chart图表,每个Itemview 是等宽的,这里的Item是根据睡眠时长然后睡眠的Type来确定不同的高度、颜色等。这里先看下睡眠泳道动图gif:

看下代码在SleepChartAdapter中设置不同的ItemView的宽度,setLinearLayout函数设置:

以上代码里通过SleepItemEntry计算出ItemWidth的宽度,然后传给setLinearLayout函数:

介绍完设置 Sleep泳道图 ItemView 不一致的宽度,下边就是如何绘制了, 因为Adpter里ItemView已经设置了它的width了,所以拿到ItemView的宽度之后,就可以直接根据它的宽度,然后不同的type确定其高度。

确定每一个RectF之后,绘制即可:

本文主要介绍在除了基本的BarChart、LineChart、BezierChart等之外,可以看到RecyclerChart 可以绘制更多的可能性的图表,在RecyclerView的 Adapter, dataModel, Render的配合下会有不同的可能性,能够解决各种不同的需求,同样例如之前的MPChart中介绍的SegmentBarChart这种变种的柱状图等,都可以实现的。

以上就是Android RecyclerChart其它图表绘制示例详解的详细内容,更多关于RecyclerChart图表绘制的资料请关注我们其它相关文章!

(0)

相关推荐

  • RecyclerBezierChart曲线图表绘制

    目录 曲线图标RecyclerBezierChart 的绘制 三阶贝塞尔曲线 cubicPath 曲线图标RecyclerBezierChart 的绘制 本篇介绍曲线图标RecyclerBezierChart 的绘制, 同样图表的公共部分的绘制这里不再做介绍,主体图表的绘制逻辑在BezierChartRender类中,其中包含主体曲线的绘制以及底部fill部分的渐变色的绘制. 三阶贝塞尔曲线 曲线的绘制用的三阶贝塞尔曲线,关于贝塞尔曲线相关的知识读者可自行Google,Android中的三阶贝塞

  • Android RecyclerLineChart实现图表绘制教程

    目录 正文 正常情况下绘制逻辑 左边界绘制 右边界绘制 代码逻辑 正文 本篇介绍线性图标RecyclerLineChart 的绘制,对于图表的公共部分X.Y轴,背景Board等的绘制先前章节已经有过介绍,这里不再重复:以及高亮选中顶部的poupWindow基本的绘制逻辑跟BarChart类似,可参照之前章节.所以针对LineChart,这里只介绍主体图表的绘制逻辑,以及线性表底部的drawFillColor填充. 首先介绍主体图表的逻辑,与BarChart不同之处在于,BartChart的每个I

  • MPAndroidChart自定义图表Chart的Attribute及Render绘制逻辑

    目录 MPAndroidChart自定义图表 1. 自定义Chart的Attribute 2. Render 自定义绘制逻辑 3. DataBuffer MPAndroidChart自定义图表 声明:本文MPChart 代表的就是 MPAndroidChart. 1. 自定义Chart的Attribute 我们回忆一下自定义View的过程里,通常我们会将一些属性控制Attribute通过自定义View的构造方法传入,然后绘制或者layout的情况下使用这些属性.Attribute类中的属性,通过

  • Android RecyclerChart其它图表绘制示例详解

    目录 正文 1. 心电图 2. 睡眠图 正文 之前章节介绍了RecyclerChart 中一些通用的图表的相关绘制逻辑,本章节介绍两种Special的Chart的绘制,一种是心电图,一种是睡眠图.首先我们来看下心电图EcgChart的绘制. 1. 心电图 EcgChart 跟LineChart形态上是相似的,但是EcgChart的点相对于LineChart密集的多,之前的LineChart相当于每个RecyclerView的Itemview 中的Model对应的value值,而心电图的ItemD

  • Android性能优化大图治理示例详解

    目录 引言 1 自定义大图View 1.1 准备工作 1.2 图片宽高适配 1.3 BitmapRegionDecoder 2 大图View的手势事件处理 2.1 GestureDetector 2.2 双击放大效果处理 2.3 手指放大效果处理 引言 在实际的Android项目开发中,图片是必不可少的元素,几乎所有的界面都是由图片构成的:像列表页.查看大图页等,都是需要展示图片,而且这两者是有共同点的,列表展示的Item数量多,如果全部加载进来势必会造成OOM,因此列表页通常采用分页加载,加上

  • Android如何实现一个DocumentProvider示例详解

    目录 前言 步骤 首先在Manifest 中注册这个Provider 创建这个Provider 重写queryRoot 重写queryDocument 重写getChildDocument 前言 假如你做了一个云盘类的app,或者可以保存用户导入的配置.用户在未来肯定需要获取这些文件,一个办法是写一个Activity,向一个文件管理软件一样把他们列出来.但是这个有一个问题是用户必须进入app 才能访问. 现在有一个解决方案是实现一个DocumentProvider 步骤 DocumentProv

  • Android编程之SurfaceView学习示例详解

    本文实例讲述了Android编程之SurfaceView学习示例.分享给大家供大家参考,具体如下: SurfaceView是View的子类,使用的方式与任何View所派生的类都是完全相同的,可以像其他View那样应用动画,并把它们放到布局中. SurfaceView封装的Surface支持使用本章前面所描述的所有标准Canvas方法进行绘图,同时也支持完全的OpenGL ES库. 使用OpenGL,你可以再Surface上绘制任何支持的2D或者3D对象,与在2D画布上模拟相同的效果相比,这种方法

  • Android如何自定义升级对话框示例详解

    前言 本文主要给大家介绍了关于Android自定义升级对话框的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现的效果如下所示 其实这也只是一个DialogFragment 而已,重点只是在于界面的设计 想要使用做出这样一个DialogFragment ,需要自定义一个View,然后将该View传入到该Dialog中 先定义布局,一个TextView用于标题,一个TextView用于升级内容阐述,一个ImageView,一个确认升级的按钮 <?xml version

  • Android FFmpeg音视频解码播放示例详解

    目录 前言 一丶FFmpeg简介 1.简介 2.FFmpeg两个强大功能 2.1 命令功能 常用参数说明: 二丶FFmpeg音视频解码播放 前言 1.FFmpeg 音视频解码流程 2.FFmpeg 音视频解码原理 2.1.解协议 2.2.解封装 2.3.解码 2.4.音视频同步 2.5.FFmpeg音视频解码 3.FFmpeg接口使用 三丶Clang编译FFmpeg常见问题 1.命令找不到 2.xmakefile 文件没有生成 3.arm-linxu-androideabi-gcc is una

  • MPAndroidChart绘制自定义运动数据图表示例详解

    目录 引言 TimeAxis SportYAxis CustomLineChart 引言 声明:文中的MPChart代指MPAndroidChart. 本系列之前的文章介绍的MPChart中BarChart相关的一些绘制,接下来我们看看LineChart相关的绘制. 这里以实际的运动相关的图表数据做业务支撑来讲解.MPChart图表支持多指触控方法,这里所有的图表自定义都关掉了这个属性,这样就减少Transformer,以及绘制过程中的更多的变动,相当于一个静态的图. 通常图表在放大的过程中,坐

  • Android画图实现MPAndroidchart折线图示例详解

    目录 效果图 依赖 activity.xml MainActivity MyMarkerView 自定义class maekertextview .xml 常用属性 效果图 用的是3.1.0的依赖 依赖 allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } } //依赖 dependencies{ implementation 'com.github.PhilJay:MPAndroidCh

  • Python+matplotlib实现绘制等高线图示例详解

    目录 前言 1. 等高线图概述 什么是等高线图? 等高线图常用场景 绘制等高线图步骤 案例展示 2. 等高线图属性 设置等高线颜色 设置等高线透明度 设置等高线颜色级别 设置等高线宽度 设置等高线样式 3. 显示轮廓标签 4. 填充颜色 5. 添加颜色条说明 总结 前言 我们在往期对matplotlib.pyplot()方法学习,到现在我们已经会绘制折线图.柱状图.散点等常规的图表啦(往期的内容如下,大家可以方便查看往期内容) Python matplotlib底层原理解析 Python利用 m

  • Python绘制惊艳的桑基图的示例详解

    目录 桑基图简介 什么是桑基图? 如何绘制桑基图? 桑基图绘图基础 调整节点位置和图表宽度 添加有意义的悬停标签 桑基图简介 很多时候,我们需要一种必须可视化数据如何在实体之间流动的情况.例如,以居民如何从一个国家迁移到另一个国家为例.这里演示了有多少居民从英格兰迁移到北爱尔兰.苏格兰和威尔士. 从这个 桑基图 (Sankey)可视化中可以明显看出,从England迁移到Wales的居民多于从Scotland或Northern Ireland迁移的居民. 什么是桑基图? 桑基图通常描绘 从一个实

随机推荐