iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >基于RecyclerChart的KLine如何绘制Scale
  • 526
分享到

基于RecyclerChart的KLine如何绘制Scale

2023-07-05 08:07:58 526人浏览 薄情痞子
摘要

这篇文章主要介绍“基于RecyclerChart的KLine如何绘制Scale”,在日常操作中,相信很多人在基于RecyclerChart的KLine如何绘制Scale问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

这篇文章主要介绍“基于RecyclerChart的KLine如何绘制Scale”,在日常操作中,相信很多人在基于RecyclerChart的KLine如何绘制Scale问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于RecyclerChart的KLine如何绘制Scale”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

以下是实现前,以及实现过程中罗列的功能点。

BaseRecyclerViewChart 处理 OnTouch

禁止掉多指拖动,影响测试。(这个暂时没处理掉)

displayNumber 跟 detector.scaleFactor的关系计算,反比。

设置 min、max limit level, 横竖屏不一样,不同的设置。

修改displayNumber 后,RecyclerView 如何刷新。

缩放时,刷新位置不准确,通过PointsX 找 Adapter, 找到虚拟手指中心点,对Adapter进行缩放。

maxDisplayNumber 为400, 180 ~ 400的区间 KLine Main 绘制 LineChart, 30 ~ 180 绘制目前的图形。

7的情况下,在LineChart下 drawFill()

1. 扩展缩放功能且兼容原有的触摸体系

首先要保留原来的触摸功能不变,同时添加现在的缩放,得修改BaseRecyclerviewChart的 OnTouch 方法, 最终保留BaseRecyclerviewChart不变,然后相关的功能放在了StockChartRecyclerView里,这样就一点都不影响之前的图表绘制了。

基于RecyclerChart的KLine如何绘制Scale

优先处理 scaleGestureDetector 缩放,同时又保持了原来的触摸体系,很好地扩展了目前的功能。

val result = scaleGestureDetector.onTouchEvent(event)if (!scaleGestureDetector.isInProgress) {            //原来的逻辑//   Log.d(TAG, "scaleGestureDetector is not in Progress")     return super.onTouchEvent(event) } else {   Log.d(TAG, "scaleGestureDetector is in Progress")   return result }

2. 具体的缩放逻辑处理

处理的就是上面罗列功能里的第3点,构建了一个简单的displayNumber跟detector.scaleFactor的模型,当scaleFactor增加的时候,displayNumber反而变少。

if (detector.scaleFactor >= 1) {//放大  displayNumber -= (displayNumber * (detector.scaleFactor - 1)).toInt()} else {  displayNumber += (displayNumber * (1 - detector.scaleFactor)).toInt()}

理论上值返回是 0 ~ 无穷大,相应的displayNumber也变成 0 ~ 无穷大, 所以这里引入一个上下边界。

var minDisplayNumber = 30var maxDisplayNumber = 400displayNumber = displayNumber.coerceAtLeast(minDisplayNumber).coerceAtMost(maxDisplayNumber)

3. 数据刷新

从以上的逻辑中拿到缩放后的displayNumber,如何给到Recyclerview进行刷新?首先在onScale()内埋个钩子,然后UI页面在这个回调里进行数据刷新,这里对mAttrs中的displayNumber也做一个刷新,容错处理,怕后续去读这个里面的值。

基于RecyclerChart的KLine如何绘制Scale

resetDisplayNumber是一个高阶函数的变量

var resetDisplayNumber: ((displayNumber:Int) -> Unit)? = null

接着就是UI页面上的刷新处理,

recyclerView.resetDisplayNumber = { displayNumber ->     this@KLineDayFragment.displayNumber = displayNumber     mXAxis.resetDisplayNumber(this@KLineDayFragment.displayNumber)     mBarChartAdapter.updateXAxis(mXAxis)}

真正刷新的逻辑在mBarChartAdapter.updateXAxis(mXAxis),在BaseBarChartAdapter中添加updateXAxis

public void updateXAxis(XAxis xAxis){  this.mXAxis = xAxis;  notifyDataSetChanged();}

上面的notifyDataSetChanged()之后就会对RecylcerView进行刷新:

基于RecyclerChart的KLine如何绘制Scale

这样子就会因为 displayNumber的改变,然后修改XAxis,最终刷新RecyclerView。

4. 缩放过程KLine Main图表变幻

这个实现的上面功能列表里的第7、8点,实现相对上面的缩放逻辑而言,功能比较简单,本来打算借用StockEntry的close字段值去画线的,这里先直接借用5日均线进行一个绘制,这个函数原来就有的,先实现功能。

直接看StockChartRenderer的绘制主逻辑代码。

基于RecyclerChart的KLine如何绘制Scale

之前只有 if分支,这次添加了else里面的drawLine, 最后一个参数表示 是否drawFill, drawLine跟之前的LineChartRenderer里暂时去掉了边界处理, drawFill里 bottom是 KLine Main 跟之前的Attache Chart的一个分割线

基于RecyclerChart的KLine如何绘制Scale

drawFill比较简单,就是通过PointF1, PointF2, bottom 构建一个path,然后drawPath 就可以了

private fun drawFill(canvas: Canvas,pointF: PointF, pointF1: PointF, bottom: Float) {    mLineFillPaint.color = ColorUtil.getResourcesColor(R.color.black_2)    val path = ChartComputeUtil.createColorRectPath(pointF, pointF1, bottom)    val drawable = LineChartDrawable(mLineFillPaint, path)    drawable.draw(canvas)}public static Path createColorRectPath(PointF pointF1, PointF pointF2, float bottom) {    Path path = new Path();    path.moveTo(pointF1.x, pointF1.y);    path.lineTo(pointF2.x, pointF2.y);    path.lineTo(pointF2.x, bottom);    path.lineTo(pointF1.x, bottom);    path.close();    return path;}

Okay, 缩放的逻辑大致就到此,然后还有一些bug, 例如缩放后,底部XAxis label的绘制在缩放过程中相应地变动。还有缩放模型的优化,功能点里的6不知道是否跟目前一些晃动有关,后续再慢慢优化吧。

下次应该会添加底部的MacD图,其实跟Volume的绘制是类同的工作,创建模拟MACD的Entity构建,然后绘制就可以了,然后就是一个添加一个底部Attache Chart的一个 手势监测,目前的点击是HighLight,然后需要替换成底部各个Attache Chart 图表的一个替换,涉及到的一个之前没处理过的一个View的上面部分跟底下点击然后在自定义的情况下,用不同的Callback调用处理,应该还好处理,相比今天的缩放而言。

到此,关于“基于RecyclerChart的KLine如何绘制Scale”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 基于RecyclerChart的KLine如何绘制Scale

本文链接: https://www.lsjlt.com/news/350810.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于RecyclerChart的KLine如何绘制Scale
    这篇文章主要介绍“基于RecyclerChart的KLine如何绘制Scale”,在日常操作中,相信很多人在基于RecyclerChart的KLine如何绘制Scale问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-07-05
  • 基于RecyclerChart的KLine绘制详解
    本章节是KLine的绘制的第二章节,在原来的基础上绘制5、10、20日均线。下面是gif的效果。 其实只是把线性图表的绘制逻辑搬到这边一起,上篇文章提到在一个For循环里处理,减少...
    99+
    2023-03-03
    RecyclerChart KLine绘制 RecyclerChart KLine
  • 基于RecyclerChart的KLine怎么绘制
    本篇内容主要讲解“基于RecyclerChart的KLine怎么绘制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于RecyclerChart的KLine怎么绘制”吧!下面是gif的效果代码如...
    99+
    2023-07-05
  • 基于RecyclerChart的KLine怎么绘制Volume
    这篇文章主要介绍“基于RecyclerChart的KLine怎么绘制Volume”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于RecyclerChart的KLine怎么绘制Volume”文章能帮...
    99+
    2023-07-05
  • RecyclerChart的KLine如何绘制
    本篇内容主要讲解“RecyclerChart的KLine如何绘制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“RecyclerChart的KLine如何绘制”吧!StockValueFormat...
    99+
    2023-07-05
  • 基于RecyclerChart的KLine绘制Volume实现详解
    目录正文创建AttacheChart YAxisAttache Chart绘制正文 本章节是基于RecyclerChart的KLine 绘制第三章节,底部AttacheChart ...
    99+
    2023-03-03
    RecyclerChart KLine绘制Volume RecyclerChart KLine绘制
  • 基于Cesium如何绘制栅栏
    这篇文章主要介绍“基于Cesium如何绘制栅栏”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Cesium如何绘制栅栏”文章能帮助大家解决问题。最终效果创建 dynamicWallMaterial...
    99+
    2023-06-30
  • 基于Python如何绘制世界地图
    本篇内容介绍了“基于Python如何绘制世界地图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.准备开始之前,你要确保Python和pip...
    99+
    2023-07-04
  • 基于Python如何绘制流星雨效果
    今天小编给大家分享一下基于Python如何绘制流星雨效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。浪漫的流星雨展示&nb...
    99+
    2023-06-29
  • 基于Python如何实现绘制一个足球
    今天小编给大家分享一下基于Python如何实现绘制一个足球的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前情提要其核心代码为...
    99+
    2023-07-05
  • 基于Echarts如何实现绘制立体柱状图
    本篇内容主要讲解“基于Echarts如何实现绘制立体柱状图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Echarts如何实现绘制立体柱状图”吧!实现方法先写一个常规的柱状图在这个基础上进行...
    99+
    2023-07-05
  • 基于Matlab实现山脊图的绘制
    目录纯色山脊图模板渐变色山脊图模板写了一个用于绘制山脊图的模板,仅需要往需要填写数据的区域填入数据点击运行即可,以下提供两款模板,第一款为纯色模板而第二款为渐变色模板: 纯色山脊图模...
    99+
    2024-04-02
  • 基于C#如何实现在图片上绘制文字
    本篇内容介绍了“基于C#如何实现在图片上绘制文字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果代码public partial...
    99+
    2023-07-04
  • 基于Cesium绘制栅栏的示例代码
    目录最终效果创建 dynamicWallMaterialProperty.js 文件网上的资料要不收费,要不代码不全,很多跟绘制墙体有关的案例要不缺放法要不干嘛的,我自己根据网上的方...
    99+
    2024-04-02
  • 基于Python+Matplotlib实现直方图的绘制
    目录1.关于直方图2.plt.hist()3. 绘制一幅简单的 频数 分布直方图4. 绘制一幅 频率 分布直方图5. 累积分布直方图(水平方向)1.关于直方图 直...
    99+
    2024-04-02
  • 如何基于Python绘制一个摸鱼倒计时界面
    这篇文章将为大家详细讲解有关如何基于Python绘制一个摸鱼倒计时界面,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现过程首先要知道、除了静态文字之外的比如当前日期、距离节日放假的天数等都是动态返回的,...
    99+
    2023-06-22
  • 基于Python实现绘制属于你的世界地图
    目录1.准备2.简单地图3.世界地图Python之所以这么流行,是因为它不仅能够应用于科技领域,还能用来做许多其他学科的研究工具,绘制地图便是其功能之一。 今天我们用matplot工...
    99+
    2022-11-13
    Python绘制世界地图 Python世界地图 Python 地图
  • 基于Python绘制三种不同的中国结
    目录前言示例一效果图代码展示示例二效果图代码展示示例三效果图代码展示前言 今天就来分享几个用python绘制的图案吧 马上就要迎来新年了 就绘制了几个中国结,嘿嘿 话不多说,直接展示...
    99+
    2023-01-09
    Python绘制中国结 Python 中国结
  • 基于Echart实现折线图的绘制详解
    效果图 不显示折线图上的拐点方法 ,3个都可以使用,代码中有显示在什么位置使用。 symbolSize:0, symbol:“none”, showSymb...
    99+
    2024-04-02
  • 基于Python实现流星雨效果的绘制
    目录1 前言2 霍金说移民外太空3 浪漫的流星雨展示 4 Python代码 1 前言 我们先给个小故事,提一下大家兴趣;然后我给出论据,得出结论。最后再浪漫的流星...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作