AAchartView是一个比较强大的 图表控件,各种版本的。
IOS版的已经使用。Android 版的正在开发。在App的图表中要实现一个按时间顺序显示数据,但在某个时间点没有数据,就不显示数据(而不是显示0)。
AAchartView 中有两个图表设置参数类:AAChartModel,AAOptions。
在IOS版中按照demo 很简单的就实现了(AAChartKitLib 放到项目中) .connectNullsSet(false) 断点不连
AAChartModel *aaChartModel = AAChartModel.new
.chartTypeSet(AAChartTypeArea)
.connectNullsSet(false)
.yAxisMaxSet(@13.0)
.yAxisGridLineStyleSet([AALineStyle styleWithWidth:@2])
// .categoriesSet(@[@"Java", @"Swift",@"C", @"C#", @"C++", @"Perl",])
.markerRadiusSet(@0)
.polarSet(true)//是否极化图形
.seriesSet(@[
AASeriesElement.new
.dataSet(@[@15.0,@15.0,@15.0,@15.0,@15.0,@15.0,]),
AASeriesElement.new
.dataSet(@[@9.0,@9.0,@9.0,@9.0,@9.0,@9.0,]),
AASeriesElement.new
.dataSet(@[@6.0,@6.0,@6.0,@6.0,@6.0,@6.0,]),
AASeriesElement.new
.dataSet(@[@3.0,@3.0,@3.0,@3.0,@3.0,@3.0,]),
])
.seriesSet(@[
AASeriesElement.new
.nameSet(@"2020")
.colorSet((id)AAGradientColor.deepSeaColor)
.dataSet(@[@9.9,NSNull.null, @9.9,NSNull.null,@9.9, NSNull.null, ]),
])
;
在android 中就照着 IOS 中的翻译,都是一样的(aachart 还是非常不错的),在..connectNullsSet(false) 时没有自动提示属性,原来没有这个属性(android是AAChartCore版)。
但是在lib源码中还是搜索到connectNulls这属性,是AAOptions的一个属性。经过IOS版和android版的比较发现:
1. 两个版中AAOptions都有connectNulls,而android 版的AAChartModel 没有,ios的AAChartModel的是有的。
2. AAChartModel的参数最终都是转换为AAOptions的参数。
IOS版 AAChartModel-->AAOptions的部分参数转转的一个函数
(configureTheStyleOfConnectNodeWithChartModel),AASeries aaSeries 这块 aaSeries.connectNulls = aaChartModel.connectNulls;
+ (void)configureTheStyleOfConnectNodeWithChartModel:(AAChartModel *)aaChartModel
plotOptions:(AAPlotOptions *)aaPlotOptions {
AAChartType aaChartType = aaChartModel.chartType;
//数据点标记相关配置,只有折线图、曲线图、折线区域填充图、曲线区域填充图、散点图才有数据点标记
if ( aaChartType == AAChartTypeArea
|| aaChartType == AAChartTypeAreaspline
|| aaChartType == AAChartTypeLine
|| aaChartType == AAChartTypeSpline
|| aaChartType == AAChartTypeScatter
|| aaChartType == AAChartTypeArearange
|| aaChartType == AAChartTypeAreasplinerange
|| aaChartType == AAChartTypePolygon
) {
AAMarker *aaMarker = AAMarker.new
.radiusSet(aaChartModel.markerRadius)//曲线连接点半径,默认是4
.symbolSet(aaChartModel.markerSymbol);//曲线点类型:"circle", "square", "diamond", "triangle","triangle-down",默认是"circle"
if (aaChartModel.markerSymbolStyle == AAChartSymbolStyleTypeInnerBlank) {
aaMarker.fillColorSet(AAColor.whiteColor)//点的填充色(用来设置折线连接点的填充色)
.lineWidthSet(@(0.4 * aaChartModel.markerRadius.floatValue))//外沿线的宽度(用来设置折线连接点的轮廓描边的宽度)
.lineColorSet(@"");//外沿线的颜色(用来设置折线连接点的轮廓描边颜色,当值为空字符串时,默认取数据点或数据列的颜色)
} else if (aaChartModel.markerSymbolStyle == AAChartSymbolStyleTypeBorderBlank) {
aaMarker.lineWidthSet(@2)
.lineColorSet(aaChartModel.backgroundColor);
}
AASeries *aaSeries = aaPlotOptions.series;
aaSeries.connectNulls = aaChartModel.connectNulls;
aaSeries.marker = aaMarker;
}
}
android版的 AAChartModel-->AAOptions调用时没有configureAAPlotOptionsMarkerStyle),AASeries aaSeries 这块没有 aaSeries.connectNulls(aaChartModel.connectNulls);
private static void configureAAPlotOptionsMarkerStyle (
AAChartModel aaChartModel,
AAPlotOptions aaPlotOptions
) {
String aaChartType = aaChartModel.chartType;
//数据点标记相关配置,只有线性图(折线图、曲线图、折线区域填充图、曲线区域填充图、散点图、折线范围填充图、曲线范围填充图、多边形图)才有数据点标记
switch (aaChartType) {
case AAChartType.Area:
case AAChartType.Areaspline:
case AAChartType.Line:
case AAChartType.Spline:
case AAChartType.Scatter:
case AAChartType.Arearange:
case AAChartType.Areasplinerange:
case AAChartType.Polygon:
AAMarker aaMarker = new AAMarker()
.radius(aaChartModel.markerRadius) //曲线连接点半径,默认是4
.symbol(aaChartModel.markerSymbol); //曲线点类型:"circle", "square", "diamond", "triangle","triangle-down",默认是"circle"
if (aaChartModel.markerSymbolStyle.equals(AAChartSymbolStyleType.InnerBlank)) {
aaMarker.fillColor(AAColor.White) //点的填充色(用来设置折线连接点的填充色)
.lineWidth(2f) //外沿线的宽度(用来设置折线连接点的轮廓描边的宽度)
.lineColor(""); //外沿线的颜色(用来设置折线连接点的轮廓描边颜色,当值为空字符串时,默认取数据点或数据列的颜色)
} else if (aaChartModel.markerSymbolStyle.equals(AAChartSymbolStyleType.BorderBlank)) {
aaMarker.lineWidth(2f)
.lineColor(aaChartModel.backgroundColor);
}
AASeries aaSeries = aaPlotOptions.series;
aaSeries.marker(aaMarker);
break;
}
}
通过上两个版本的比较发现 转换的过程android 确实没有aaSeries.connectNulls 转换,android 版的AAChartModel 肯定没有。
那就通过AAOptions 来设置:connectNulls 的路径为 aaOptions.plotOptions.series.connectNulls
AAOptions options = configureUOptions(data);
aaChartView.aa_drawChartWithChartOptions(options);
private AAOptions configureUOptions(List data){
AAChartModel aaChartModel = configureUChartModelVol(data);
aaChartModel.chartType = AAChartType.Spline;
aaChartModel.markerRadius = new Float(0);
aaChartModel.stacking = AAChartStackingType.False;
AAOptions aaOptions = aaChartModel.aa_toAAOptions();
aaOptions.plotOptions.series.connectNulls(false); //断点不连
return aaOptions;
}