AAChartCore-Kotlin icon indicating copy to clipboard operation
AAChartCore-Kotlin copied to clipboard

AAChartView 内的方法有具体的介绍说明文章吗?

Open panyingdaoz opened this issue 1 year ago • 5 comments

AAChartView 源码方法没有说明介绍,比如不同情况应当使用哪个刷新,git上的刷新方法与源码不一致,当前使用aa_updateChartWithOptions刷新是会导致UI卡顿,我的曲线更新很快,曲线点在100-200之间,请问我应当怎么写比较好

panyingdaoz avatar May 20 '24 08:05 panyingdaoz

   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

AAChartModel avatar May 20 '24 08:05 AAChartModel

    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

AAChartModel avatar May 20 '24 08:05 AAChartModel

如果想要动态更新图表的某一个或者多个属性(非数据)的话, 适合用

  • aa_updateChartWithOptions

如果只是想要专门更新图表数据的话, 适合用

  • aa_onlyRefreshTheChartDataWithChartOptionsSeriesArray

AAChartModel avatar May 20 '24 08:05 AAChartModel

我的曲线更新很快,曲线点在100-200之间,请问我应当怎么写比较好

但是如你所说, 你的曲线图表更新频率很快. 由于 AAChartCore 这里的图表实际上还是通过 HighchartWebView 等非原生技术来绘制的, 本身就存在性能瓶颈, 因此我个人觉得你最好还是应该换成使用其他的原生图表库来实现图表的高频刷新数据功能.

AAChartModel avatar May 20 '24 09:05 AAChartModel

我需要跟新的数据就两个,一个是曲线值Y坐标值,一个是X坐标值,快速的追加最后一条而已,原来的方法存在先缩小绘制完成在放大过程,然后在这个过程中就会有卡顿现场,我目前调整为使用第一次绘制方法(一次性绘制所有)就很快

panyingdaoz avatar May 21 '24 04:05 panyingdaoz