自定义android图表SimpleChart

今天分享一个自定义的图表控件。其实这是以前做一个项目的时候写的,当时也想过在网上找一些开源的图表库直接用就行了,但是实在没有找到符合要求的(主要是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~~

这次就先分享效果和代码,下一次会详细解析一下代码怎么实现的~

你可能感兴趣的:(android,图表,SimpleChart)