RecyclerBezierChart曲线图表绘制

 更新时间:2022年12月21日 08:39:05   作者:cxy107750  
这篇文章主要为大家介绍了RecyclerBezierChart曲线图表绘制示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

曲线图标RecyclerBezierChart 的绘制

本篇介绍曲线图标RecyclerBezierChart 的绘制, 同样图表的公共部分的绘制这里不再做介绍,主体图表的绘制逻辑在BezierChartRender类中,其中包含主体曲线的绘制以及底部fill部分的渐变色的绘制。

三阶贝塞尔曲线

曲线的绘制用的三阶贝塞尔曲线,关于贝塞尔曲线相关的知识读者可自行Google,Android中的三阶贝塞尔曲线的绘制API接口,以下为Path构建三阶曲线,其中包含两个Control Points.

这里的绘制逻辑主要参考了MPAndroidChart中的曲线绘制.

首先将Entry的 Y值转换成对应的PointF,这个之前图表都有同样的操作,存入originPointFList, 然后通过originPointFList计算对应的 Control Points List, 存入 controList, 其中ControlPoint 这个类笔者自定义的包含了两个Control Point 点,紧接着Control Point的计算再介绍。

得到originPointFList, controList后,每次迭代套用Path.cubicTo(controlPoint1, controlPoint2, endPoint) API即可,最终得到 cubicPath.

cubicPath

曲线图底部是渐变Color区域,这里构建了封闭的Path cubicFillPath, 其中包含了cubicPath。

private void drawCubicFill(RecyclerView parent, Canvas c, List<PointF> pointFList, Path spline, float bottom) {
    spline.lineTo(pointFList.get(pointFList.size() - 1).x, bottom);
    spline.lineTo(pointFList.get(0).x, bottom);
    spline.close();
    drawFilledPath(parent, c, spline);
}

整个主体图表的绘制逻辑大致如上,非常简单。

下面是刚提到的关于 Control Point 的计算, 这里定义了一个类 ControlPoint, 包含两个Control Point点。上面计算controList 方法也就作为 它的static 方法放在ControlPoint 中了。

List<ControlPoint> controlList = ControlPoint.getControlPointList(originPointFList, mBarChartAttrs.bezierIntensity);

其中 bezierIntensity 表示控制贝塞尔曲线曲率强度的一个参数系数。

对于不是第一个,最后点, 计算公式:

controlPoint.x = cur.x + (next.x - pre.x) * bezierIntensity; Y值同理。

两个边界位置Index 边界的原因稍作变动,具体如下:

至此曲线图的绘制结束,非常简单,最后附上一张RecyclerBezierChart的gif 图。

本专栏到这里几个常用的图表的纯绘制介绍完了,接下来大致两到三章节介绍图表动态相关的逻辑,选中高亮的控制,长按选中滑动跟RecyclerView本身滑动的一个冲突上的解决;控制同一天显示在一屏时的回弹的控制逻辑。

以上就是RecyclerBezierChart曲线图表绘制的详细内容,更多关于RecyclerBezierChart图表绘制的资料请关注脚本之家其它相关文章!

相关文章

  • Android  RecyclerView详解及简单实例

    Android RecyclerView详解及简单实例

    这篇文章主要介绍了Android RecyclerView详解及简单实例的相关资料,需要的朋友可以参考下
    2017-01-01
  • Android自定义控件实现可左右滑动的导航条

    Android自定义控件实现可左右滑动的导航条

    这篇文章主要介绍了Android自定义控件实现可左右滑动的导航条,能响应快速滑动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android中SurfaceFlinger工作原理

    Android中SurfaceFlinger工作原理

    这篇文章介绍了Android中SurfaceFlinger的工作原理,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • android实现上传本地图片到网络功能

    android实现上传本地图片到网络功能

    这篇文章主要为大家详细介绍了android实现上传本地图片到网络功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Android笔记之:App模块化及工程扩展的应用

    Android笔记之:App模块化及工程扩展的应用

    这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用
    2013-04-04
  • Android使用JobScheduler定期推送本地通知实例代码

    Android使用JobScheduler定期推送本地通知实例代码

    本篇文章主要介绍了Android使用JobScheduler定期推送本地通知实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Android反编译看看手Q口令红包的实现原理

    Android反编译看看手Q口令红包的实现原理

    这篇文章主要介绍了Android反编译看看手Q口令红包的实现原理,需要的朋友可以参考下
    2016-02-02
  • 浅谈谈Android 图片选择器

    浅谈谈Android 图片选择器

    近段时间有项目要求写一个类似于微信发送图片时,用来选择照片的一个图片浏览器。相信有很多网友也有这样的需求,这里分享给大家
    2015-12-12
  • Kotlin全局捕捉协程异常方法详解

    Kotlin全局捕捉协程异常方法详解

    协程是互相协作的程序,协程是结构化的。如果把Java的异常处理机制,照搬到Kotlin协程中,一定会遇到很多的坑。Kotlin协程中的异常主要分两大类,协程取消异常(CancellationException) 其他异常
    2022-08-08
  • Android 中的危险权限详细整理

    Android 中的危险权限详细整理

    这篇文章主要介绍了Android 中的危险权限详细整理的相关资料,Android 中有上百种权限,现在将所有的权限归为两类,一类是普通权限,一类的危险权限,危险权限则表示那些可能会触及到用户安全隐私或者对设备安全造成影响的权限,需要的朋友可以参考下
    2017-07-07

最新评论