فهرست منبع

Add more chart samples

An An 5 سال پیش
والد
کامیت
057503b70a

+ 6 - 1
app/src/main/java/com/aachartmodel/aainfographics/AAInfographicsLib/AAChartConfiger/AASeriesElement.kt

@@ -31,7 +31,6 @@ package com.example.chartcorekotlin.AAChartConfiger
 import com.aachartmodel.aainfographics.AAInfographicsLib.AAOptionsModel.AADataLabels
 import com.aachartmodel.aainfographics.AAInfographicsLib.AAOptionsModel.AAMarker
 import com.aachartmodel.aainfographics.AAInfographicsLib.AAOptionsModel.AATooltip
-import java.util.Dictionary
 
 /**
  * Created by anan on 2018/4/16.
@@ -44,6 +43,7 @@ class AASeriesElement {
     private var name: String? = null
     private var data: Array<Any>? = null
     private var lineWidth: Float? = null//折线图、曲线图、直方折线图、折线填充图、曲线填充图、直方折线填充图的线条宽度
+    private var borderWidth: Float? = null
     private var color: Any? = null
     private var fillColor: Any? = null
     private var fillOpacity: Float? = null//折线填充图、曲线填充图、直方折线填充图等填充图类型的填充颜色透明度
@@ -84,6 +84,11 @@ class AASeriesElement {
         return this
     }
 
+    fun borderWidth(prop: Float): AASeriesElement {
+        borderWidth = prop
+        return this
+    }
+
     fun color(prop: Any): AASeriesElement {
         color = prop
         return this

+ 16 - 16
app/src/main/java/com/aachartmodel/aainfographics/AAInfographicsLib/AAOptionsModel/AADataLabels.kt

@@ -9,22 +9,22 @@
 package com.aachartmodel.aainfographics.AAInfographicsLib.AAOptionsModel
 
 class AADataLabels {
-    private var enabled: Boolean? = null
-    private var style: AAStyle? = null
-    private var format: String? = null
-    private var rotation: Float? = null
-    private var allowOverlap: Boolean? = null
-    private var useHTML: Boolean? = null
-    private var distance: Float? = null
-    private var verticalAlign: String? = null
-    private var x: Float? = null
-    private var y: Float? = null
-    private var color: String? = null
-    private var backgroundColor: String? = null
-    private var borderColor: String? = null
-    private var borderRadius: Float? = null
-    private var borderWidth: Float? = null
-    private var shape: String? = null
+    var enabled: Boolean? = null
+    var style: AAStyle? = null
+    var format: String? = null
+    var rotation: Float? = null
+    var allowOverlap: Boolean? = null
+    var useHTML: Boolean? = null
+    var distance: Float? = null
+    var verticalAlign: String? = null
+    var x: Float? = null
+    var y: Float? = null
+    var color: String? = null
+    var backgroundColor: String? = null
+    var borderColor: String? = null
+    var borderRadius: Float? = null
+    var borderWidth: Float? = null
+    var shape: String? = null
 
     fun enabled(prop: Boolean?): AADataLabels {
         enabled = prop

+ 3 - 2
app/src/main/java/com/aachartmodel/aainfographics/AAInfographicsLib/AAOptionsModel/AALabels.kt

@@ -9,6 +9,7 @@
 package com.aachartmodel.aainfographics.AAInfographicsLib.AAOptionsModel
 
 import com.aachartmodel.aainfographics.AAInfographicsLib.AAChartConfiger.AAJSStringPurer
+import com.example.chartcorekotlin.AAChartConfiger.AAChartAlignType
 
 
 class AALabels {
@@ -32,8 +33,8 @@ class AALabels {
      var y: Float? = null//相对于坐标轴刻度线的垂直平偏移。 默认是:null.
      var useHTML: Boolean? = null//HTML渲染
 
-    fun align(prop: String): AALabels {
-        align = prop
+    fun align(prop: AAChartAlignType): AALabels {
+        align = prop.value
         return this
     }
 

+ 33 - 33
app/src/main/java/com/aachartmodel/aainfographics/AAInfographicsLib/AAOptionsModel/AAPlotOptions.kt

@@ -73,24 +73,24 @@ class AAPlotOptions {
 }
 
 class AAColumn {
-    private var name: String? = null
-    private var data: Array<Any>? = null
-    private var color: String? = null
-    private var grouping: Boolean? =
+    var name: String? = null
+    var data: Array<Any>? = null
+    var color: String? = null
+    var grouping: Boolean? =
         null//Whether to group non-stacked columns or to let them render independent of each other. Non-grouped columns will be laid out individually and overlap each other. 默认是:true.
-    private var pointPadding: Float? =
+    var pointPadding: Float? =
         null//Padding between each column or bar, in x axis units. 默认是:0.1.
-    private var pointPlacement: Float? =
+    var pointPlacement: Float? =
         null//Padding between each column or bar, in x axis units. 默认是:0.1.
-    private var groupPadding: Float? =
+    var groupPadding: Float? =
         null//Padding between each value groups, in x axis units. 默认是:0.2.
-    private var borderWidth: Float? = null
-    private var colorByPoint: Boolean? =
+    var borderWidth: Float? = null
+    var colorByPoint: Boolean? =
         null//对每个不同的点设置颜色(当图表类型为 AAColumn 时,设置为 AAColumn 对象的属性,当图表类型为 bar 时,应该设置为 bar 对象的属性才有效)
-    private var dataLabels: AADataLabels? = null
-    private var stacking: String? = null
-    private var borderRadius: Float? = null
-    private var yAxis: Float? = null
+    var dataLabels: AADataLabels? = null
+    var stacking: String? = null
+    var borderRadius: Float? = null
+    var yAxis: Float? = null
 
     fun name(prop: String): AAColumn {
         name = prop
@@ -160,24 +160,24 @@ class AAColumn {
 }
 
 class AABar {
-    private var name: String? = null
-    private var data: Array<Any>? = null
-    private var color: String? = null
-    private var grouping: Boolean? =
+    var name: String? = null
+    var data: Array<Any>? = null
+    var color: String? = null
+    var grouping: Boolean? =
         null//Whether to group non-stacked columns or to let them render independent of each other. Non-grouped columns will be laid out individually and overlap each other. 默认是:true.
-    private var pointPadding: Float? =
+    var pointPadding: Float? =
         null//Padding between each column or bar, in x axis units. 默认是:0.1.
-    private var pointPlacement: Float? =
+    var pointPlacement: Float? =
         null//Padding between each column or bar, in x axis units. 默认是:0.1.
-    private var groupPadding: Float? =
+    var groupPadding: Float? =
         null//Padding between each value groups, in x axis units. 默认是:0.2.
-    private var borderWidth: Float? = null
-    private var colorByPoint: Boolean? =
+    var borderWidth: Float? = null
+    var colorByPoint: Boolean? =
         null//对每个不同的点设置颜色(当图表类型为 AABar 时,设置为 AABar 对象的属性,当图表类型为 bar 时,应该设置为 bar 对象的属性才有效)
-    private var dataLabels: AADataLabels? = null
-    private var stacking: String? = null
-    private var borderRadius: Float? = null
-    private var yAxis: Float? = null
+    var dataLabels: AADataLabels? = null
+    var stacking: String? = null
+    var borderRadius: Float? = null
+    var yAxis: Float? = null
 
     fun name(prop: String): AABar {
         name = prop
@@ -248,7 +248,7 @@ class AABar {
 
 class AALine {
     var dataLabels: AADataLabels? = null
-    
+
     fun dataLabels(prop: AADataLabels): AALine {
         dataLabels = prop
         return this
@@ -257,7 +257,7 @@ class AALine {
 
 class AASpline {
     var dataLabels: AADataLabels? = null
-    
+
     fun dataLabels(prop: AADataLabels): AASpline {
         dataLabels = prop
         return this
@@ -266,7 +266,7 @@ class AASpline {
 
 class AAArea {
     var dataLabels: AADataLabels? = null
-    
+
     fun dataLabels(prop: AADataLabels): AAArea {
         dataLabels = prop
         return this
@@ -341,9 +341,9 @@ class AAPie {
 }
 
 class AAColumnrange {
-    private var borderRadius: Float? = null
-    private var borderWidth: Float? = null
-    private var dataLabels: AADataLabels? = null
+    var borderRadius: Float? = null
+    var borderWidth: Float? = null
+    var dataLabels: AADataLabels? = null
 
     fun borderRadius(prop: Float?): AAColumnrange {
         borderRadius = prop
@@ -362,7 +362,7 @@ class AAColumnrange {
 }
 
 class AAArearange {
-    private var dataLabels: AADataLabels? = null
+    var dataLabels: AADataLabels? = null
 
     fun dataLabels(prop: AADataLabels): AAArearange {
         dataLabels = prop

+ 8 - 0
app/src/main/java/com/aachartmodel/aainfographics/ChartsDemo/AdditionalContent/DrawChartWithAAOptionsActivity.kt

@@ -33,6 +33,8 @@ import com.aachartmodel.aainfographics.AAInfographicsLib.AAOptionsModel.AAOption
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.customChartLegendStyle
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.configureAAPlotBandsForChart
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.configureAAPlotLinesForChart
+import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.configureDoubleYAxesAndColumnLineMixedChart
+import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.configureDoubleYAxesMarketDepthChart
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.configureDoubleYAxisChartOptions
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.configureTheMirrorColumnChart
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.configureTripleYAxesMixedChart
@@ -41,6 +43,8 @@ import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComp
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.configureXAxisPlotBand
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.configure_DataLabels_XAXis_YAxis_Legend_Style
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.customAATooltipWithJSFunction
+import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.customAreaChartTooltipStyleLikeHTMLTable
+import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.customLineChartDataLabelsFormat
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.ChartOptionsComposer.Companion.customXAxisCrosshairStyle
 import com.aachartmodel.aainfographics.R
 import com.aachartmodel.aainfographics.aainfographicsLib.aachartConfiger.AAChartView
@@ -75,6 +79,10 @@ class DrawChartWithAAOptionsActivity : AppCompatActivity() {
             "configureTheMirrorColumnChart" -> return configureTheMirrorColumnChart()
             "configureDoubleYAxisChartOptions" -> return configureDoubleYAxisChartOptions()
             "configureTripleYAxesMixedChart" -> return configureTripleYAxesMixedChart()
+            "customLineChartDataLabelsFormat"-> return customLineChartDataLabelsFormat()
+            "configureDoubleYAxesAndColumnLineMixedChart"-> return configureDoubleYAxesAndColumnLineMixedChart()
+            "configureDoubleYAxesMarketDepthChart"-> return configureDoubleYAxesMarketDepthChart()
+            "customAreaChartTooltipStyleLikeHTMLTable"-> return customAreaChartTooltipStyleLikeHTMLTable()
         }
         return configureAAPlotBandsForChart()
     }

+ 3 - 0
app/src/main/java/com/aachartmodel/aainfographics/ChartsDemo/AdditionalContent/JSFormatterFunctionActivity.kt

@@ -34,6 +34,7 @@ import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.CustomTooltipCom
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.CustomTooltipComposer.Companion.customAreaChartTooltipStyleWithFormatterFunction2
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.CustomTooltipComposer.Companion.customAreaChartTooltipStyleWithFormatterFunction3
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.CustomTooltipComposer.Companion.customAreaChartTooltipStyleWithFormatterFunction4
+import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.CustomTooltipComposer.Companion.customArearangeChartTooltip
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.CustomTooltipComposer.Companion.customBoxplotTooltipContent
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.CustomTooltipComposer.Companion.customDoubleXAxesChart
 import com.aachartmodel.aainfographics.ChartsDemo.ChartComposer.CustomTooltipComposer.Companion.customStackedAndGroupedColumnChartTooltip
@@ -68,6 +69,8 @@ class JSFormatterFunctionActivity : AppCompatActivity() {
             "customYAxisLabels2" -> return customYAxisLabels2()
             "customStackedAndGroupedColumnChartTooltip" -> return customStackedAndGroupedColumnChartTooltip()
             "customDoubleXAxesChart" -> return customDoubleXAxesChart()
+            "customArearangeChartTooltip" -> return customArearangeChartTooltip()
+
         }
         return customAreaChartTooltipStyleWithFormatterFunction1()
     }

+ 37 - 25
app/src/main/java/com/aachartmodel/aainfographics/ChartsDemo/BasicContent/MainActivity.kt

@@ -28,21 +28,21 @@
 package com.aachartmodel.aainfographics
 
 import android.content.Intent
-import android.support.v7.app.AppCompatActivity
 import android.os.Bundle
+import android.support.v7.app.AppCompatActivity
 import android.view.View
-import android.widget.AdapterView
+import android.widget.AdapterView.OnItemClickListener
 import android.widget.ArrayAdapter
 import android.widget.ListView
-import com.aachartmodel.aainfographics.ChartsDemo.AdditionalContent.JSFormatterFunctionActivity
 import com.aachartmodel.aainfographics.ChartsDemo.AdditionalContent.DrawChartWithAAOptionsActivity
 import com.aachartmodel.aainfographics.ChartsDemo.AdditionalContent.EvaluateJSStringFunctionActivity
 import com.aachartmodel.aainfographics.ChartsDemo.AdditionalContent.HideOrShowChartSeriesActivity
+import com.aachartmodel.aainfographics.ChartsDemo.AdditionalContent.JSFormatterFunctionActivity
 import com.aachartmodel.aainfographics.ChartsDemo.BasicContent.CommonChartActivity
 import com.aachartmodel.aainfographics.ChartsDemo.BasicContent.CustomStyleChartActivity
 import com.aachartmodel.aainfographics.ChartsDemo.BasicContent.MixedChartActivity
 import com.aachartmodel.aainfographics.ChartsDemo.BasicContent.SpecialChartActivity
-import com.example.chartcorekotlin.AAChartConfiger.*
+import com.example.chartcorekotlin.AAChartConfiger.AAChartType
 
 class MainActivity : AppCompatActivity() {
 
@@ -111,6 +111,10 @@ class MainActivity : AppCompatActivity() {
         "configureTheMirrorColumnChart",
         "configureDoubleYAxisChartOptions",
         "configureTripleYAxesMixedChart",
+        "customLineChartDataLabelsFormat",
+        "configureDoubleYAxesAndColumnLineMixedChart",
+        "configureDoubleYAxesMarketDepthChart",
+        "customAreaChartTooltipStyleLikeHTMLTable",
         /*隐藏或显示内容*/
         "/*隐藏或显示内容*/Column Chart---柱形图--------------",
         "Bar Chart---条形图",
@@ -129,8 +133,10 @@ class MainActivity : AppCompatActivity() {
         "自定义Y轴文字",
         "自定义Y轴文字2",
         "自定义分组堆积柱状图tooltip内容",
-        "双 X 轴镜像图表"
-    )
+        "双 X 轴镜像图表",
+        "customArearangeChartTooltip"
+
+        )
 
     private var chartTypeArr = arrayOf(
         /*基础类型图表*/
@@ -198,6 +204,10 @@ class MainActivity : AppCompatActivity() {
         "configureTheMirrorColumnChart",
         "configureDoubleYAxisChartOptions",
         "configureTripleYAxesMixedChart",
+        "customLineChartDataLabelsFormat",
+        "configureDoubleYAxesAndColumnLineMixedChart",
+        "configureDoubleYAxesMarketDepthChart",
+        "customAreaChartTooltipStyleLikeHTMLTable",
         /*隐藏或显示内容*/
         AAChartType.Column.value,
         AAChartType.Bar.value,
@@ -217,6 +227,7 @@ class MainActivity : AppCompatActivity() {
         "customYAxisLabels2",
         "customStackedAndGroupedColumnChartTooltip",
         "customDoubleXAxesChart",
+        "customArearangeChartTooltip",
         /*执行由 JavaScript 字符串映射转换成的 js function 函数*/
         "evalJSFunction1",
         "evalJSFunction2",
@@ -234,26 +245,27 @@ class MainActivity : AppCompatActivity() {
         listView.adapter = adapter
 
 
-        listView.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ ->
-            println(position)
-            if (position <= 7) {/*基础类型图表*/
-                goToCommonChartActivity(position)
-            } else if (position <= 19) {/*特殊类型图表*/
-                goToSpecialChartActivity(position)
-            } else if (position <= 28) { /*Mixed Chart---混合图*/
-                goToMixedChartActivity(position)
-            } else if (position <= 46) {/*自定义样式图表*/
-                goToCustomStyleChartActivity(position)
-            } else if (position <= 58) {/*使用AAOptions绘制图表*/
-                goToDrawChartWithAAOptionsActivity(position)
-            } else if (position <= 65) { /*隐藏或显示内容*/
-                goToHideOrShowChartSeriesActivity(position)
-            } else if (position <= 75) {/*formatter js function*/
-                goToCustomTooltipWithJSFunctionActivity(position)
-            } else if (position > 75) { /*eval JS Function*/
-                goToEvaluateJSStringFunctionActivity(position)
+        listView.onItemClickListener =
+            OnItemClickListener { adapter, view, position, id ->
+                println(position)
+                if (position <= 7) { /*基础类型图表*/
+                    goToCommonChartActivity(position)
+                } else if (position <= 19) { /*特殊类型图表*/
+                    goToSpecialChartActivity(position)
+                } else if (position <= 28) { /*Mixed Chart---混合图*/
+                    goToMixedChartActivity(position)
+                } else if (position <= 46) { /*自定义样式图表*/
+                    goToCustomStyleChartActivity(position)
+                } else if (position <= 62) { /*使用AAOptions绘制图表*/
+                    goToDrawChartWithAAOptionsActivity(position)
+                } else if (position <= 69) { /*隐藏或显示内容*/
+                    goToHideOrShowChartSeriesActivity(position)
+                } else if (position <= 80) { /*formatter js function*/
+                    goToCustomTooltipWithJSFunctionActivity(position)
+                } else { /*eval JS Function*/
+                    goToEvaluateJSStringFunctionActivity(position)
+                }
             }
-        }
     }
 
     private fun goToCommonChartActivity(position: Int) {

+ 348 - 0
app/src/main/java/com/aachartmodel/aainfographics/ChartsDemo/ChartComposer/ChartOptionsComposer.kt

@@ -800,5 +800,353 @@ function () {
                 .series(arrayOf(element1, element2, element3))
         }
 
+       fun customLineChartDataLabelsFormat(): AAOptions {
+            val aaChartModel = AAChartModel() //选择图表类型
+                .chartType(AAChartType.Line)
+                .colorsTheme(arrayOf("#465DBC")) //title标题
+                .title("最近三十分钟数据展示") //title字体大小
+                .titleFontSize(20f) //title字体颜色
+                .titleFontColor("#0F0F0F") //坐标轴字体颜色
+                .axesTextColor("#0F0F0F") //背景颜色
+                .zoomType(AAChartZoomType.XY)
+                .backgroundColor("#FFFFFF") //数据是否显示
+                .dataLabelsEnabled(true) //x轴是否显示数据
+                .xAxisLabelsEnabled(true) //x轴显示的数据间隔
+                .xAxisTickInterval(5) //y轴是否显示数据
+                .yAxisLabelsEnabled(true) //y轴标题
+                .yAxisTitle("湿度%") //y轴最大值
+                .yAxisMax(100.0f) //y轴最小值
+                .yAxisMin(0.0f)
+                .yAxisAllowDecimals(true) //y轴数据
+                .series(arrayOf(
+                        AASeriesElement()
+                            .name("湿度")
+                            .data(arrayOf(44.0999, 44.8880, 44.7770, 43.0066, 43.6660, 43.5550)
+                            )
+                    )
+                )
+            val aaOptions = AAOptionsConstructor.configureChartOptions(aaChartModel)
+            aaOptions.plotOptions?.line?.dataLabels?.format =
+                "{point.y:.4f} ℃" //保留 Y 轴值的小数点后 4 位
+            return aaOptions
+        }
+
+       fun configureDoubleYAxesAndColumnLineMixedChart(): AAOptions {
+            val stopsArr: Array<Any> = arrayOf(
+                    arrayOf(0.0, "rgba(156,107,211,0.5)"),
+                    arrayOf(0.2, "rgba(156,107,211,0.3)"),
+                    arrayOf(1.0, "rgba(156,107,211,0)")
+                )
+            val gradientColorDic1: Map<String, *> = AAGradientColor.linearGradient(
+                AALinearGradientDirection.ToBottom,
+                stopsArr
+            )
+            val gradientColorDic2: Map<String, *> = AAGradientColor.linearGradient(
+                AALinearGradientDirection.ToBottom,
+                "#956FD4",
+                "#3EACE5" //颜色字符串设置支持十六进制类型和 rgba 类型
+            )
+            val category = arrayOf(
+                "市区", "万州", "江北", "南岸", "北碚", "綦南", "长寿", "永川", "璧山", "江津",
+                "城口", "大足", "垫江", "丰都", "奉节", "合川", "江津区", "开州", "南川", "彭水",
+                "黔江", "石柱", "铜梁", "潼南", "巫山", "巫溪", "武隆", "秀山", "酉阳", "云阳",
+                "忠县", "川东", "检修"
+            )
+            val goalValuesArr = arrayOf(
+                18092, 20728, 24045, 28348, 32808
+                , 36097, 39867, 44715, 48444, 50415
+                , 56061, 62677, 59521, 67560, 18092, 20728, 24045, 28348, 32808
+                , 36097, 39867, 44715, 48444, 50415, 36097, 39867, 44715, 48444, 50415
+                , 50061, 32677, 49521, 32808
+            )
+            val realValuesArr = arrayOf(
+                4600, 5000, 5500, 6500, 7500
+                , 8500, 9900, 12500, 14000, 21500
+                , 23200, 24450, 25250, 33300, 4600, 5000, 5500, 6500, 7500
+                , 8500, 9900, 22500, 14000, 21500, 8500, 9900, 12500, 14000, 21500
+                , 23200, 24450, 25250, 7500
+            )
+            val rateValuesArr = arrayOfNulls<Any>(33) 
+            for (i in 0..32) {
+                val goalValue: Float = goalValuesArr[i].toFloat()
+                val realValue: Float = realValuesArr[i].toFloat()
+                val rateValue = realValue / goalValue
+                rateValuesArr[i] = rateValue
+            }
+            val aaChart = AAChart()
+                .backgroundColor("#191E40")
+            val aaTitle = AATitle()
+                .text("")
+            val aaLabels = AALabels()
+                .enabled(true)
+                .style(AAStyle()
+                        .color(AAColor.lightGrayColor())
+                )
+            val aaXAxis = AAXAxis()
+                .visible(true)
+                .labels(aaLabels)
+                .min(0f)
+                .categories(category)
+            val aaYAxisTitleStyle = AAStyle()
+                .color("#1e90ff") //Title font color
+                .fontSize(14f) //Title font size
+                .fontWeight(AAChartFontWeightType.Bold) //Title font weight
+                .textOutline("0px 0px contrast")
+            val yAxis1 = AAYAxis()
+                .visible(true)
+                .labels(aaLabels)
+                .gridLineWidth(0f)
+                .title(AATitle()
+                        .text("已贯通 / 计划贯通")
+                        .style(aaYAxisTitleStyle)
+                )
+            val yAxis2 = AAYAxis()
+                .visible(true)
+                .labels(aaLabels)
+                .gridLineWidth(0f)
+                .title(AATitle()
+                        .text("贯通率")
+                        .style(aaYAxisTitleStyle)
+                )
+                .opposite(true)
+            val aaTooltip = AATooltip()
+                .enabled(true)
+                .shared(true)
+            val aaPlotOptions = AAPlotOptions()
+                .series(
+                    AASeries()
+                        .animation(
+                            AAAnimation()
+                                .easing(AAChartAnimationType.EaseTo)
+                                .duration(1000)
+                        )
+                )
+                .column(AAColumn()
+                        .grouping(false)
+                        .pointPadding(0f)
+                        .pointPlacement(0f)
+                )
+            val aaLegend = AALegend()
+                .enabled(true)
+                .itemStyle(
+                    AAItemStyle()
+                        .color(AAColor.lightGrayColor())
+                )
+                .floating(true)
+                .layout(AAChartLayoutType.Horizontal)
+                .align(AAChartAlignType.Left)
+                .x(30f)
+                .verticalAlign(AAChartVerticalAlignType.Top)
+                .y(10f)
+            val goalValuesElement: AASeriesElement = AASeriesElement()
+                .name("计划贯通")
+                .type(AAChartType.Column)
+                .borderWidth(0f)
+                .color(gradientColorDic1)
+                .yAxis(0)
+                .data(goalValuesArr as Array<Any>)
+            val realValuesElement: AASeriesElement = AASeriesElement()
+                .name("已贯通")
+                .type(AAChartType.Column)
+                .borderWidth(0f)
+                .color(gradientColorDic2)
+                .yAxis(0)
+                .data(realValuesArr as Array<Any>)
+            val rateValuesElement = AASeriesElement()
+                .name("贯通率")
+                .type(AAChartType.Line)
+                .marker(
+                    AAMarker()
+                        .radius(7f) //曲线连接点半径,默认是4
+                        .symbol(AAChartSymbolType.Circle.value) //曲线点类型:"circle", "square", "diamond", "triangle","triangle-down",默认是"circle"
+                        .fillColor("#ffffff") //点的填充色(用来设置折线连接点的填充色)
+                        .lineWidth(3f) //外沿线的宽度(用来设置折线连接点的轮廓描边的宽度)
+                        .lineColor("") //外沿线的颜色(用来设置折线连接点的轮廓描边颜色,当值为空字符串时,默认取数据点或数据列的颜色)
+                )
+                .color("#F02FC2")
+                .yAxis(1)
+                .data(rateValuesArr as Array<Any>)
+            return AAOptions()
+                .chart(aaChart)
+                .title(aaTitle)
+                .xAxis(aaXAxis)
+                .yAxisArray(arrayOf(yAxis1, yAxis2))
+                .tooltip(aaTooltip)
+                .plotOptions(aaPlotOptions)
+                .legend(aaLegend)
+                .series(arrayOf(
+                        goalValuesElement,
+                        realValuesElement,
+                        rateValuesElement
+                    )
+                )
+        }
+
+       fun configureDoubleYAxesMarketDepthChart(): AAOptions {
+            val aaChart = AAChart()
+                .type(AAChartType.Area)
+            val aaTitle = AATitle()
+                .text("ETH-BTC 市场深度图")
+            val aaSubtitle = AASubtitle()
+                .text("数据来源: https://github.com/AAChartModel")
+            val aaXAxis = AAXAxis()
+                .visible(true)
+                .plotLines(arrayOf(
+                        AAPlotLinesElement()
+                            .color(AAColor.redColor())
+                            .value(0.1523f)
+                            .width(1.5f)
+                            .label(
+                                AALabel()
+                                    .text("实际价格")
+                                    .style(AAChartLineDashStyleType.ShortDashDotDot) //                                .rotation(90)
+                            )
+                    )
+                )
+            val yAxis1 = AAYAxis()
+                .visible(true)
+                .lineWidth(1f)
+                .title(AATitle()
+                        .text("")
+                )
+                .tickWidth(1f)
+                .tickLength(5f)
+                .tickPosition("inside")
+                .gridLineWidth(1f)
+                .labels(AALabels()
+                        .enabled(true) //设置 y 轴是否显示数字
+                        .align(AAChartAlignType.Left)
+                        .x(8f)
+                )
+            val yAxis2 = AAYAxis()
+                .opposite(true)
+                .visible(true)
+                .lineWidth(1f)
+                .title(AATitle()
+                        .text("")
+                )
+                .tickWidth(1f)
+                .tickLength(5f)
+                .tickPosition("inside")
+                .gridLineWidth(0f)
+                .labels(AALabels()
+                        .enabled(true) //设置 y 轴是否显示数字
+                        .align(AAChartAlignType.Right)
+                        .x(-8f)
+                )
+            val aaTooltip = AATooltip()
+                .enabled(true)
+                .headerFormat("<span style=\\\"font-size=10px;\\\">Price: {point.key}</span><br/>")
+                .valueDecimals(2)
+            val aaLegend = AALegend()
+                .enabled(false)
+            val element1 = AASeriesElement()
+                .name("Bids")
+                .color("#04d69f")
+                .step(true)
+                .data(arrayOf(
+                        arrayOf(0.1524, 0.948665),
+                        arrayOf(0.1539, 35.510715),
+                        arrayOf(0.154, 39.883437),
+                        arrayOf(0.1541, 40.499661),
+                        arrayOf(0.1545, 43.262994000000006),
+                        arrayOf(0.1547, 60.14799400000001),
+                        arrayOf(0.1553, 60.30799400000001),
+                        arrayOf(0.1558, 60.55018100000001),
+                        arrayOf(0.1564, 68.381696),
+                        arrayOf(0.1567, 69.46518400000001),
+                        arrayOf(0.1569, 69.621464),
+                        arrayOf(0.157, 70.398015),
+                        arrayOf(0.1574, 70.400197),
+                        arrayOf(0.1575, 73.199217),
+                        arrayOf(0.158, 77.700017),
+                        arrayOf(0.1583, 79.449017),
+                        arrayOf(0.1588, 79.584064),
+                        arrayOf(0.159, 80.584064),
+                        arrayOf(0.16, 81.58156),
+                        arrayOf(0.1608, 83.38156)
+                    )
+                )
+            val element2 = AASeriesElement()
+                .name("Asks")
+                .color("#1e90ff")
+                .step(true)
+                .data(arrayOf(
+                        arrayOf(0.1435, 242.521842),
+                        arrayOf(0.1436, 206.49862099999999),
+                        arrayOf(0.1437, 205.823735),
+                        arrayOf(0.1438, 197.33275),
+                        arrayOf(0.1439, 153.677454),
+                        arrayOf(0.144, 146.007722),
+                        arrayOf(0.1442, 82.55212900000001),
+                        arrayOf(0.1443, 59.152814000000006),
+                        arrayOf(0.1444, 57.942260000000005),
+                        arrayOf(0.1445, 57.483850000000004),
+                        arrayOf(0.1446, 52.39210800000001),
+                        arrayOf(0.1447, 51.867208000000005),
+                        arrayOf(0.1448, 44.104697),
+                        arrayOf(0.1449, 40.131217),
+                        arrayOf(0.145, 31.878217),
+                        arrayOf(0.1451, 22.794916999999998),
+                        arrayOf(0.1453, 12.345828999999998),
+                        arrayOf(0.1454, 10.035642),
+                        arrayOf(0.148, 9.326642),
+                        arrayOf(0.1522, 3.76317)
+                    )
+                )
+            return AAOptions()
+                .chart(aaChart)
+                .title(aaTitle)
+                .subtitle(aaSubtitle)
+                .xAxis(aaXAxis)
+                .yAxisArray(arrayOf(yAxis1, yAxis2))
+                .tooltip(aaTooltip)
+                .legend(aaLegend)
+                .series(arrayOf(element1, element2))
+        }
+
+       fun customAreaChartTooltipStyleLikeHTMLTable(): AAOptions {
+            val element1 = AASeriesElement()
+                .name("Predefined symbol")
+                .data(arrayOf(0.45, 0.43, 0.50, 0.55, 0.58, 0.62, 0.83, 0.39, 0.56, 0.67, 0.50, 0.34, 0.50, 0.67, 0.58, 0.29, 0.46, 0.23, 0.47, 0.46, 0.38, 0.56, 0.48, 0.36))
+
+            val element2 = AASeriesElement()
+                .name("Image symbol")
+                .data(arrayOf(0.38, 0.31, 0.32, 0.32, 0.64, 0.66, 0.86, 0.47, 0.52, 0.75, 0.52, 0.56, 0.54, 0.60, 0.46, 0.63, 0.54, 0.51, 0.58, 0.64, 0.60, 0.45, 0.36, 0.67))
+
+            val element3 = AASeriesElement()
+                .name("Base64 symbol (*)")
+                .data(arrayOf(0.46, 0.32, 0.53, 0.58, 0.86, 0.68, 0.85, 0.73, 0.69, 0.71, 0.91, 0.74, 0.60, 0.50, 0.39, 0.67, 0.55, 0.49, 0.65, 0.45, 0.64, 0.47, 0.63, 0.64))
+
+            val element4 = AASeriesElement()
+                .name("Custom symbol")
+                .data(arrayOf(0.60, 0.51, 0.52, 0.53, 0.64, 0.84, 0.65, 0.68, 0.63, 0.47, 0.72, 0.60, 0.65, 0.74, 0.66, 0.65, 0.71, 0.59, 0.65, 0.77, 0.52, 0.53, 0.58, 0.53))
+
+
+            val aaChartModel = AAChartModel()
+                .chartType(AAChartType.Areaspline) //图表类型
+                .title("") //图表主标题
+                .subtitle("") //图表副标题
+                .colorsTheme(arrayOf("#04d69f", "#1e90ff", "#ef476f", "#ffd066"))
+                .stacking(AAChartStackingType.Normal)
+                .yAxisTitle("") //设置 Y 轴标题
+                .yAxisVisible(false)
+                .markerRadius(0f)
+                .series(arrayOf(element1, element2, element3, element4))
+
+            val aaOptions = AAOptionsConstructor.configureChartOptions(aaChartModel)
+            aaOptions.tooltip!!
+                .shared(true)
+                .useHTML(true)
+                .headerFormat("<small>{point.key} 摄氏度</small><table>")
+                .pointFormat("<tr><td style=\\\"color: {series.color}\\\">{series.name}: </td>"
+                            + "<td style=\\\"text-align: right\\\"><b>{point.y}EUR</b></td></tr>"
+                )
+                .footerFormat("</table>")
+                .valueDecimals(2)
+            return aaOptions
+        }
+
+
     }
 }

+ 73 - 0
app/src/main/java/com/aachartmodel/aainfographics/ChartsDemo/ChartComposer/CustomTooltipComposer.kt

@@ -549,5 +549,78 @@ function () {
                 .tooltip(aaTooltip)
                 .series(arrayOf(aaSeriesElement1, aaSeriesElement2))
         }
+
+         fun customArearangeChartTooltip():AAOptions {
+          val aaChartModel =  AAChartModel()
+                .chartType(AAChartType.Areasplinerange)
+                .title("Area spline range chart")
+                .subtitle("virtual data")
+                .yAxisTitle("℃")
+                .series(arrayOf(
+                    AASeriesElement()
+                        .name("2020")
+                        .data(arrayOf(
+                            /* 2014-06-01 */
+                            arrayOf(140158080, 5.1,  20.6),
+                            arrayOf(140166720, 6.6,  24.6),
+                            arrayOf(140175360, 9.7,  22.2),
+                            arrayOf(140184000, 9.6,  21.6),
+                            arrayOf(140192640, 13.0, 20.0),
+                            arrayOf(140201280, 12.9, 18.2),
+                            arrayOf(140209920, 8.5,  23.2),
+                            arrayOf(140218560, 9.2,  21.4),
+                            arrayOf(140227200, 10.5, 22.0),
+                            arrayOf(140235840, 7.3,  23.4),
+                            arrayOf(140244480, 12.1, 18.2),
+                            arrayOf(140253120, 11.1, 13.3),
+                            arrayOf(140261760, 10.0, 20.7),
+                            arrayOf(140270400, 5.8,  23.4),
+                            arrayOf(140279040, 7.4,  20.1),
+                            arrayOf(140287680, 10.3, 21.9),
+                            arrayOf(140296320, 7.8,  16.8),
+                            arrayOf(140304960, 11.6, 19.7),
+                            arrayOf(140313600, 9.8,  16.0),
+                            arrayOf(140322240, 10.7, 14.4),
+                            arrayOf(140330880, 9.0,  15.5),
+                            arrayOf(140339520, 5.1,  13.3),
+                            arrayOf(140348160, 10.0, 19.3),
+                            arrayOf(140356800, 5.2,  22.1),
+                            arrayOf(140365440, 6.3,  21.3),
+                            arrayOf(140374080, 5.5,  21.1),
+                            arrayOf(140382720, 8.4,  19.7),
+                            arrayOf(140391360, 7.1,  23.3),
+                            arrayOf(140400000, 6.1,  20.8),
+                            arrayOf(140408640, 8.4,  22.6)
+                        )
+                        ))
+                )
+             val aaOptions = AAOptionsConstructor.configureChartOptions(aaChartModel)
+
+             aaOptions.tooltip!!
+                 .useHTML(true)
+                 .formatter("""
+           function () {
+            var myPointOptions = this.points[0].point.options;
+            var xValue = myPointOptions.x;
+            var lowValue = myPointOptions.low;
+            var highValue = myPointOptions.high;
+            var titleStr = '🌕 this is my custom tooltip description text content <br>';
+            var xValueStr = '🌖 this is x value  : ' + xValue + '<br>';
+            var lowValueStr = ' 🌗 this is low value  : ' + lowValue + '<br>';
+            var highValueStr = '🌘 this is high value : ' + highValue + '<br>';
+            var tooltipDescStr =  titleStr + xValueStr + lowValueStr + highValueStr;
+            return tooltipDescStr;
+        }
+                 """.trimIndent()
+                 )
+                 .backgroundColor("#000000")
+                 .borderColor("#000000")
+                 .style(AAStyle()
+                         .color("#FFD700")
+                         .fontSize(12f)
+                 )
+
+             return aaOptions
+         }
     }
 }