網站首頁 編程語言 正文
曲線圖標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本身滑動的一個沖突上的解決;控制同一天顯示在一屏時的回彈的控制邏輯。
原文鏈接:https://juejin.cn/post/7179283220473577509
相關推薦
- 2022-05-02 dubbo服務使用redis注冊中心的系列異常解決_Redis
- 2022-12-24 C#?Math中常用數學運算的示例詳解_C#教程
- 2022-09-25 Django 使用定時任務
- 2022-07-15 C++面向對象之類和對象那些你不知道的細節原理詳解_C 語言
- 2022-10-29 qt輸出自定義的pdf文件源碼詳解
- 2022-12-10 Input系統之InputReader處理合成事件詳解_Android
- 2022-06-30 Oracle中的觸發器trigger_oracle
- 2022-11-27 C++常見的stl容器與相關操作?示例解析_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支