Android - 为 BarSeries 中的每个数据点设置其他颜色(shinobicharts)
Posted
技术标签:
【中文标题】Android - 为 BarSeries 中的每个数据点设置其他颜色(shinobicharts)【英文标题】:Android - set other color for each data point in BarSeries (shinobicharts) 【发布时间】:2014-04-19 11:24:04 【问题描述】:我尝试使用 shinobicharts 来设计如下图:
http://www.upsieutoc.com/images/2014/04/19/barseries.png
酒吧系列
我使用了 BarSeries,但遇到以下问题:
我找不到在每个 DataPoint (20, 25, 30) 上设置数据的函数。
我想为每个数据点设置其他颜色,如上图所示。 (红、绿、紫)
标签右对齐。 (法国、马来西亚、西班牙)。
还有这段代码:
ChartFragment chartFragment = (ChartFragment) getFragmentManager().findFragmentById(R.id.chart);
ShinobiChart shinobiChart = chartFragment.getShinobiChart();
NumberAxis xAxis = new NumberAxis();
xAxis.setPosition(Position.REVERSE);
shinobiChart.addXAxis(xAxis);
CategoryAxis yAxis = new CategoryAxis();
shinobiChart.addYAxis(yAxis);
BarSeries series = new BarSeries();
series.setTitle("Country");
DataAdapter<Integer, String> adapter = new SimpleDataAdapter<Integer, String>();
adapter.add(new DataPoint<Integer, String>(20, "Spain"));
adapter.add(new DataPoint<Integer, String>(25, "Malaysia"));
adapter.add(new DataPoint<Integer, String>(30, "France"));
series.setDataAdapter(adapter);
shinobiChart.addSeries(series);
请帮帮我!
【问题讨论】:
【参考方案1】:显然是you can't。
解决方案是有 3 个系列,每个系列有一个值,而不是一个系列有 3 个值。例如:
ChartFragment chartFragment = (ChartFragment) getFragmentManager().findFragmentById(R.id.chart);
ShinobiChart shinobiChart = chartFragment.getShinobiChart();
NumberAxis xAxis = new NumberAxis();
xAxis.setPosition(Position.REVERSE);
shinobiChart.addXAxis(xAxis);
CategoryAxis yAxis = new CategoryAxis();
shinobiChart.addYAxis(yAxis);
BarSeries series1 = new BarSeries();
series1.setTitle("Country");
BarSeriesStyle bss1 = series1.getStyle();
bss1.setAreaColor(Color.RED);
DataAdapter<Integer, String> adapter = new SimpleDataAdapter<Integer, String>();
adapter.add(new DataPoint<Integer, String>(20, "Spain"));
series1.setDataAdapter(adapter);
shinobiChart.addSeries(series1);
BarSeries series2 = new BarSeries();
series2.setTitle("Country");
BarSeriesStyle bss2 = series2.getStyle();
bss2.setAreaColor(Color.GREEN);
DataAdapter<Integer, String> adapter = new SimpleDataAdapter<Integer, String>();
adapter.add(new DataPoint<Integer, String>(25, "Malaysia"));
series2.setDataAdapter(adapter);
shinobiChart.addSeries(series2);
BarSeries series3 = new BarSeries();
series3.setTitle("Country");
BarSeriesStyle bs3 = series3.getStyle();
bss3.setAreaColor(Color.BLUE);
DataAdapter<Integer, String> adapter = new SimpleDataAdapter<Integer, String>();
adapter.add(new DataPoint<Integer, String>(30, "France"));
series3.setDataAdapter(adapter);
shinobiChart.addSeries(series3);
【讨论】:
【参考方案2】:我或许可以为您的问题的第 2 点提供部分答案:“我想为每个数据点设置其他颜色,如上图所示。(红色、绿色、紫色)”
您是否尝试过对 SCHartBarSeries 进行子类化?如果没有,试试这个:
#pragma mark - Custom Styling of Bars
@interface customBarSeries:SChartBarSeries
@end
@implementation customBarSeries
- (SChartBarSeriesStyle *)styleForPoint:(id<SChartData>)point
SChartBarSeriesStyle *newStyle = [super styleForPoint:point];
int country = [[point sChartXValue] intValue];
// datapoint specific customization:
switch (country)
case COUNTRY_FRANCE:
newStyle.areaColor = [UIColor redColor];
break;
case COUNTRY_MALAYSIA:
newStyle.areaColor = [UIColor greenColor];
break;
case COUNTRY_SPAIN:
newStyle.areaColor = [UIColor purpleColor];
break;
return newStyle;
@end
// And in you chart's "sChart: seriesAtIndex:" method, use your custom bars instead of the shinobi default:
-(SChartSeries *)sChart:(ShinobiChart *)chart seriesAtIndex:(NSInteger)index
switch (index)
case COUNTRY_BARS_SERIE_INDEX:
// Instead of this: SChartBarSeries *barSeries = [SChartBarSeries new];
customBarSeries *barSeries = [customBarSeries new]; // <-- Here you use your customized sub-class
barSeries.title = @"Countries";
// Style things that are common to all data points in the serie
barSeries.style.dataPointLabelStyle.displayValues = SChartDataPointLabelDisplayValuesX;
barSeries.style.dataPointLabelStyle.showLabels = YES; // <-- You may need this as well
return barSeries;
break;
不知道这个标签部分是否有效,或者标签应该放在哪里。在编写这个示例时,我只是偶然发现了 dataPointStyle 的 label 属性,所以你必须使用它看看会发生什么。
至于Y轴上的国家名称,需要自定义Y轴,系列没有。
希望有帮助!
【讨论】:
以上是关于Android - 为 BarSeries 中的每个数据点设置其他颜色(shinobicharts)的主要内容,如果未能解决你的问题,请参考以下文章
Nativescript-vue,如何更改 BarSeries(Radchart) 图形“条形”颜色?
适用于 Android 的 Fabric 插件中的每日新用户身份 - crashlytics
尝试为内部列表视图的每一行膨胀不同的视图 (android.view.InflateException: Binary XML..)
如何在android studio中获取camera2 api中的每一帧,例如camera api中的PreviewCallback和camerax中的ImageAnalysis.Analyzer?
Java/Android 中的 Firebase:事务被后续集合覆盖
listview中的每一个Item都有edittext,如何能够让listview的item和edittext都能响应点击消息