您的位置:首页 > 移动开发 > Android开发

自定义android图表SimpleChart

2016-03-21 17:13 471 查看
今天分享一个自定义的图表控件。其实这是以前做一个项目的时候写的,当时也想过在网上找一些开源的图表库直接用就行了,但是实在没有找到符合要求的(主要是UI要求),另外网上的开源图表库实在是太强大了,例如什么HelloChart之类的,我实在是用不上了,就算要用我也得重画UI。那个时候我又想起了一句话:“不要重复做同一个轮子”... 于是这两个想法就在激烈碰撞,然后我纠结了一小会,又想起了一句话:“不要做全能函数,要做尽可能功能单一的函数”...嗯...好吧,最后我还是放弃了各种强大的开源图表库,自己动手写了一个...

然后,最近做毕设,也是做一个android应用,需要用到图表,于是就把这个东西翻出来,并且重构了一下(其实差不多相当于重写了,因为之前写得太糟糕了-o(╯□╰)o)... 然后拿出来分享分享- -

先贴代码链接吧o(╯□╰)o
SimpleChart github地址

然后贴几张效果图吧o(╯□╰)o







嗯...其实折线图那里还有一个y轴动画的,先不贴了,搞动图太累了o(╯□╰)o

看了上面这些效果图之后,应该也可以看出,SimpleChart是可以支持多数据绘制的,也就是折线图可以绘制多条线,柱状图可以绘制多条柱子~~~ 其实,还有一个特色,效果图没有展示出来,那就是折线图的不同线的数据个数可以不一样呢~~~

SimpleChart在使用上也是比较简单方便的。下面给出折线图的示例代码。

chart = (LineChart) findViewById(R.id.chart);

final ArrayList<Float> y1 = new ArrayList<>();
final ArrayList<Float> y2 = new ArrayList<>();
final ArrayList<String> x = new ArrayList<>();
float j=0;
for (float i=21;i>=0;i--) {
x.add(String.valueOf(j));
j++;
y1.add(i);
y2.add(i*2);
}

final ArrayList<String> legends = new ArrayList<>();
final ArrayList<Integer> colors = new ArrayList<>();
legends.add("1 hello, Charts!");
legends.add("2 hello, Charts!");
colors.add(R.color.default_main_color);
colors.add(R.color.chart_deep_blue);

chart.setYAxisValuesFormatter(new Chart.YAxisValueFormatter() {
@Override
public String YvaluesString(float v) {
return (int)v + "-";
}
});
chart.setTheme(ChartTheme.THEME_DARK);
chart.setAdapter(new LineChartAdapter() {
@Override
public int getLineCount() {
return 2;
}

@Override
public ArrayList<Float> getLineData(int index) {
if (index == 0) return y1;
else            return y2;
}

@Override
public int getLineColor(int index) {
return colors.get(index);
}

@Override
public int getXLabelsCount() {
return x.size();
}

@Override
public String getXLabel(int position) {
return x.get(position);
}

@Override
public int getLegendCount() {
return 2;
}

@Override
public String getLegend(int position) {
return legends.get(position);
}

@Override
public int getColorId(int position) {
return colors.get(position);
}
});
基本上就和android原生的什么listView之类的一样的使用方法了,因为它在设计上使用的就是适配器模式嘛,“Adapter在手,天下我有”的赶脚哈哈哈O(∩_∩)O~~

这次就先分享效果和代码,下一次会详细解析一下代码怎么实现的~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: