基于RecyclerChart的KLine绘制详解

本章节是KLine的绘制的第二章节,在原来的基础上绘制5、10、20日均线。下面是gif的效果。

其实只是把线性图表的绘制逻辑搬到这边一起,上篇文章提到在一个For循环里处理,减少遍历,之前是通过Entry的Y值找对应的PointF的Y值,这里需要用StockEntry中的5日、10日、20日均线值去求值。就是类似的一些逻辑替换,思想还是不变,然后左右边界的处理暂时先放一放,滑动到边界会有一些bug。

同时,这里的均值没有参与到图表YAxis的Max、min的计算中去,会有线出上下边界的情况,待修复。

整体的绘制思想还是比较简单的,代码如下:

然后就是5/10/20均线点的绘制,这里值最好Server返回,或者计算好存入数据库,然后图表每次绘制时从数据库里读取数据。所以这三个值,跟绘制没有关联。

用一个滑动窗口的管理类,外加一个队列,在原来的一次遍历的基础上处理完:

    var queue:Queue<Float> = LinkedList()
    var sum:Float = 0f
    fun queueAddItem(value:Float){
        queue.offer(value)
        sum += value
    }
    fun queueRemoveItem(){
       val value = queue.poll()
        value?.let {
            sum -= value
        }
    }
    fun getAvg(type:Int, value: Float): Float{
        queueAddItem(value)
        val count = queue.size
        if (count < type){
            return value
        }else if (count == type){
            val avg = sum/count
            queueRemoveItem()
            return avg
        }
        return -1f
    }
}

接下来会处理底部的成交量图以及其它的一些底部图表;之前的方式是通过两个Chart表的联动处理,看见网上有MPChartAndroid的类似的也是这样处理的。绘制均线的过程中想到为什么不一起画呢?同样可以在上面的那个for循环里一起画了,然后就不存在两表的联动问题了。只不过多了一个工作就是,需要处理两个YAxis,同时,底部点YAxis也要实时地计算Max、Min, 然后联动图表。

再就是缩放,上一章节提到的,其实只需缩放后,按比例计算当下的DisplayNumber,然后再invalidate(), 这里的话就是Adapter.notifyDatachange()应该就Okay了,本章节暂时先到此。

到此这篇关于基于RecyclerChart的KLine绘制详解的文章就介绍到这了,更多相关RecyclerChart KLine内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于RecyclerChart的KLine绘制Volume实现详解

    目录 正文 创建AttacheChart YAxis Attache Chart绘制 正文 本章节是基于RecyclerChart的KLine 绘制第三章节,底部AttacheChart 成交量图表 Volume的绘制,可以看到直接在原来的KLine MainChart下面绘制的,用的是第二章最后提及的方案,就是跟MainChart的绘制在一个For循环里处理的,所以也不存在两表联动的问题了.但是这个方案可能会有个隐患,这个后面提及吧,暂时放一放,直接看gif效果图(没有设计UI的出图,暂且看着

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

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

  • RecyclerChart的KLine的绘制

    目录 正文 StockValueFormatter 绘制蜡烛图 正文 继上次章节介绍完RecyclerChart的一些动态属性之后,本章节开始基于RecyclerChart绘制新的图表,股票相关的Chart,笔者花了大概一天,绘制如下的一个效果,发现换了电脑之后没有装PS,所以CandleChart的颜色自己随意取的.其实无论绘制什么业务的图形,最终交给图表的不过是一堆要展示的数据而已. 下面是gif图,还有好些功能没有加,比如高亮用的是原来的RecyclerChart之前的样式.Kline作为

  • 基于RecyclerChart的KLine绘制详解

    本章节是KLine的绘制的第二章节,在原来的基础上绘制5.10.20日均线.下面是gif的效果. 其实只是把线性图表的绘制逻辑搬到这边一起,上篇文章提到在一个For循环里处理,减少遍历,之前是通过Entry的Y值找对应的PointF的Y值,这里需要用StockEntry中的5日.10日.20日均线值去求值.就是类似的一些逻辑替换,思想还是不变,然后左右边界的处理暂时先放一放,滑动到边界会有一些bug. 同时,这里的均值没有参与到图表YAxis的Max.min的计算中去,会有线出上下边界的情况,待

  • 基于Echart实现折线图的绘制详解

    效果图 不显示折线图上的拐点方法 ,3个都可以使用,代码中有显示在什么位置使用. symbolSize:0, symbol:“none”, showSymbol:false, 代码: var mess = ["00:00", "03:00", "06:00", "09:00", "12:00", "15:00", "18:00", "21:00",

  • 基于canvas粒子系统的构建详解

    前面的话 本文将从最基本的imageData对象的理论知识说开去,详细介绍canvas粒子系统的构建 imageData 关于图像数据imageData共有3个方法,包括getImageData().putImageData().createImageData() [getImageData()] 2D上下文可以通过getImageData()取得原始图像数据.这个方法接收4个参数:画面区域的x和y坐标以及该区域的像素宽度和高度 例如,要取得左上角坐标为(10,5).大小为50*50像素的区域的

  • 基于tomcat配置文件server.xml详解

    1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务,因为是入门示例,所以设置极其简单,只需修改$CATALINA_HOME/conf/server.xml文件为如下内容即可.其中大部分都采用了默认设置,只是在engine容器中添加了两个Host容器. <?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SH

  • 基于JavaScript表单脚本(详解)

    什么是表单? 一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域:包含了文本框.密码框.隐藏域.多行文本框.复选框.单选框.下拉选择框和文件上传框等. 表单按钮:包括提交按钮.复位按钮和一般按钮:用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作. JavaScript与表单间的关系:JS最初的应用就是用于分担服务器处理表单的责任,打破依赖服务器的局面,尽管目前web和jav

  • 基于AngularJS的简单使用详解

    Angular Js 的初步认识和使用 一: 1.模块化 定义模块和控制器 ng-app="myapp" controller="myctrl" 指定模型 ng-model="" 获取的属性值: ng-bind="属性名"或者{{属性名}} 2.初始化模块(在Script中进行) var myapp1 =angular.module("myapp",[]); 3.定义模块的控制器,并依赖注入, $scope

  • 基于Vue单文件组件详解

    本文将详细介绍Vue单文件组件 概述 在很多 Vue 项目中,使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页面内指定一个容器元素. 这种方式在很多中小规模的项目中运作的很好,在这些项目里 JavaScript 只被用来加强特定的视图.但当在更复杂的项目中,或者前端完全由 JavaScript 驱动的时候,下面这些缺点将变得非常明显: 1.全局定义 (Global definitions) 强制要求每个 compon

  • 基于RestTemplate的使用方法(详解)

    1.postForObject :传入一个业务对象,返回是一个String 调用方: BaseUser baseUser=new BaseUser(); baseUser.setUserid(userid); baseUser.setPass(pass); String postForObject = restTemplate.postForObject(this.getURL()+"/user/login", baseUser, String.class); return postF

  • 基于java Servlet编码/异常处理(详解)

    1. Servlet输出中文 (1)为什么会有乱码? out.println方法在输出时或者表单提交的时候,浏览器会对表单中的中文参数值进行编码; 注:会使用表单所在的页面打开时使用的编码方式进行编码服务器端默认会使用ISO-8859-1进行解码所以会产生乱码 (2)如何解决? 1)post请求:requset.setcharcterencoding(string charset);添加到所有获取参数前并且该方法只支持post方法 2)get请求:修改服务器设置 2. 读取请求参数值 (1)St

随机推荐