AAChartView 内的方法有具体的介绍说明文章吗?
AAChartView 源码方法没有说明介绍,比如不同情况应当使用哪个刷新,git上的刷新方法与源码不一致,当前使用aa_updateChartWithOptions刷新是会导致UI卡顿,我的曲线更新很快,曲线点在100-200之间,请问我应当怎么写比较好
fun aa_updateChartWithOptions(
options: Any,
redraw: Boolean
) {
val isAAOptionsClass = options is AAOptions
val finalOptionsMapStr: String
if (isAAOptionsClass) {
val aaOptionsMapStr = Gson().toJson(options)
finalOptionsMapStr = aaOptionsMapStr
} else {
var classNameStr = options.javaClass.simpleName
classNameStr = classNameStr.replace("AA", "")
//convert fist character to be lowercase string
val firstChar = classNameStr.substring(0, 1)
val lowercaseFirstStr = firstChar.toLowerCase(Locale.ROOT)
classNameStr = classNameStr.substring(1)
val finalClassName = lowercaseFirstStr + classNameStr
val finalOptionsMap = HashMap<String, Any>()
finalOptionsMap[finalClassName] = options
val optionsStr = Gson().toJson(finalOptionsMap)
finalOptionsMapStr = optionsStr
}
val javaScriptStr = "updateChart('$finalOptionsMapStr','$redraw')"
safeEvaluateJavaScriptString(javaScriptStr)
}
从上面的 AAChartView 的源码内容中可以看出, aa_updateChartWithOptions 实际上调用的是 Highcharts 的这个方法:
- https://api.highcharts.com/class-reference/Highcharts.Chart#update
对应的 Highcharts 在线 demo 如下:
- https://www.highcharts.com/demo/highcharts/chart-update
fun aa_onlyRefreshTheChartDataWithChartOptionsSeriesArray(
seriesElementsArr: Array<AASeriesElement>,
animation: Boolean
) {
val seriesArr = Gson().toJson(seriesElementsArr)
val javaScriptStr = "onlyRefreshTheChartDataWithSeries('$seriesArr','$animation')"
safeEvaluateJavaScriptString(javaScriptStr)
}
aa_onlyRefreshTheChartDataWithChartOptionsSeriesArray 方法实际上调用的是 Highcharts 的这个方法:
- https://api.highcharts.com/class-reference/Highcharts.Series#setData
如果想要动态更新图表的某一个或者多个属性(非数据)的话, 适合用
-
aa_updateChartWithOptions
如果只是想要专门更新图表数据的话, 适合用
-
aa_onlyRefreshTheChartDataWithChartOptionsSeriesArray
我的曲线更新很快,曲线点在100-200之间,请问我应当怎么写比较好
但是如你所说, 你的曲线图表更新频率很快. 由于 AAChartCore 这里的图表实际上还是通过 Highchart 和 WebView 等非原生技术来绘制的, 本身就存在性能瓶颈, 因此我个人觉得你最好还是应该换成使用其他的原生图表库来实现图表的高频刷新数据功能.
我需要跟新的数据就两个,一个是曲线值Y坐标值,一个是X坐标值,快速的追加最后一条而已,原来的方法存在先缩小绘制完成在放大过程,然后在这个过程中就会有卡顿现场,我目前调整为使用第一次绘制方法(一次性绘制所有)就很快