在android中使用achartengine来绘制各种图表

可以绘制线性图,点状图,柱状图,饼状图,气泡图等

1. [文件] ABarChart.java ~ 2KB     下载(231)     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.anjoyo.achartengine;
 
import java.util.Random;
 
import org.achartengine.ChartFactory;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
 
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
 
public class ABarChart {
    public Intent execute(Context context) {
         
        return ChartFactory.getBarChartIntent(context, getBarChartDataset(), getBarChartRenderer(), Type.DEFAULT);
    }
 
    private XYMultipleSeriesRenderer getBarChartRenderer() {
        // TODO Auto-generated method stub
        XYMultipleSeriesRenderer renderer=new XYMultipleSeriesRenderer();
        SimpleSeriesRenderer r;
        r=new SimpleSeriesRenderer();
        r.setColor(Color.BLUE);
        renderer.addSeriesRenderer(r);
        r=new SimpleSeriesRenderer();
        r.setColor(Color.GREEN);
        renderer.addSeriesRenderer(r);
        setBarChartRenderer(renderer);
        return renderer;
    }
 
    private void setBarChartRenderer(XYMultipleSeriesRenderer renderer) {
        // TODO Auto-generated method stub
        renderer.setChartTitle("Bar Chart");
        renderer.setXTitle("X Axis");
        renderer.setYTitle("Y Axis");
        renderer.setXAxisMax(10.5);
        renderer.setXAxisMin(0.5);
        renderer.setYAxisMax(210);
        renderer.setYAxisMin(0);
    }
 
    private XYMultipleSeriesDataset getBarChartDataset() {
        // TODO Auto-generated method stub
        XYMultipleSeriesDataset dataset=new XYMultipleSeriesDataset();
        final int SERIES_NR=2;
        final int NR=10;
        Random random=new Random();
        for (int i = 0; i < SERIES_NR; i++) {
            CategorySeries series=new CategorySeries("Bar Chart---"+(i+1));
            for (int j = 0; j < NR; j++) {
                series.add(100+random.nextInt(100));
            }
            dataset.addSeries(series.toXYSeries());
        }
        return dataset;
    }
}

2. [文件] ABubbleChart.java ~ 3KB     下载(113)     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.anjoyo.achartengine;
 
import java.util.Random;
 
import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYValueSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
 
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
 
public class ABubbleChart {
    private final int SERIES_NR = 3;
    private final int NR = 20;
 
    public Intent execute(Context context) {
        return ChartFactory.getBubbleChartIntent(context,
                getBubbleChartDataset(), getBubbleChartRenderer(),
                "Bubble Chart Demo");
    }
 
    private XYMultipleSeriesRenderer getBubbleChartRenderer() {
        // TODO Auto-generated method stub
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        int[] linearColor = { Color.RED, Color.GREEN, Color.BLUE };
        XYSeriesRenderer r;
        for (int i = 0; i < SERIES_NR; i++) {
            // entry=new XYEntry<Integer, Integer>(key, value);
            r = new XYSeriesRenderer();
            r.setColor(linearColor[i]);
            r.setPointStyle(PointStyle.POINT);
            r.setLineWidth(2);
            renderer.addSeriesRenderer(r);
        }
        setBarChartRenderer(renderer);
        return renderer;
    }
 
    private XYMultipleSeriesDataset getBubbleChartDataset() {
        // TODO Auto-generated method stub
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        for (int i = 0; i < SERIES_NR; i++) {
            XYValueSeries series = new XYValueSeries("Bubble Chart---"
                    + (i + 1));
            int temp = 10 * i;
            int[][] data = getBasicData();
            for (int j = 0; j < data.length; j++) {
                if((j+1)%5 ==0){
                    int x = data[j][0];
                    int y = temp;
                    int value=data[j][1]+temp;
                    series.add(x, y, value);
                }
            }
            dataset.addSeries(series);
        }
        return dataset;
    }
 
    private int[][] getBasicData() {
        int[][] data = new int[20][2];
        Random rand = new Random();
        for (int i = 0; i < data.length; i++) {
            data[i][0] = i;
            data[i][1] = 20 + rand.nextInt(20) % 20;
        }
        return data;
    }
 
    private void setBarChartRenderer(XYMultipleSeriesRenderer renderer) {
        // TODO Auto-generated method stub
        renderer.setChartTitle("Bubble Chart");
        renderer.setXTitle("X Axis");
        renderer.setYTitle("Y Axis");
        renderer.setXAxisMax(20);
        renderer.setXAxisMin(0);
        renderer.setYAxisMax(30);
        renderer.setYAxisMin(0);
        renderer.setAntialiasing(true);//没有看出有啥效果来
        renderer.setApplyBackgroundColor(true);//设置背景颜色
        renderer.setBackgroundColor(Color.TRANSPARENT);
        renderer.setShowAxes(true);//
        renderer.setAxesColor(Color.GRAY);
        renderer.setClickEnabled(true);//设置了之后,不可再拖动
        renderer.setZoomButtonsVisible(true);//设置伸缩按钮是否可见
        renderer.setZoomEnabled(true);
        renderer.setExternalZoomEnabled(true);//设置是否可以向伸缩
        renderer.setLabelsColor(Color.GREEN);
        renderer.setLabelsTextSize(16);
    }
}

3. [文件] ALinearChart.java ~ 2KB     下载(122)     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package com.anjoyo.achartengine;
 
import java.util.Random;
 
import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
 
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
 
public class ALinearChart {
    private final int SERIES_NR=3;
    private final int NR=20;
    public Intent execute(Context context) {
        return ChartFactory.getLineChartIntent(context, getLinearChartDataset(), getLinearChartRenderer(), "Linear Chart Another");
    }
 
    private XYMultipleSeriesRenderer getLinearChartRenderer() {
        // TODO Auto-generated method stub
        int[] linearColor={Color.RED, Color.GREEN, Color.BLUE};
        int[] belowLinearColor={Color.YELLOW, Color.CYAN, Color.GRAY};
        XYMultipleSeriesRenderer renderer=new XYMultipleSeriesRenderer();
        XYSeriesRenderer tempRender;
        for (int i = 0; i < SERIES_NR; i++) {
            tempRender=new XYSeriesRenderer();
            tempRender.setColor(linearColor[i]);
//          tempRender.setFillBelowLine(true);
//          tempRender.setFillBelowLineColor(belowLinearColor[i]);
            tempRender.setPointStyle(PointStyle.POINT);
            tempRender.setLineWidth(2);
            renderer.addSeriesRenderer(tempRender);
        }
        setLinearChartRenderer(renderer);
        return renderer;
    }
 
    private void setLinearChartRenderer(XYMultipleSeriesRenderer renderer) {
        // TODO Auto-generated method stub
        renderer.setChartTitle("Three Linear Chart");
        renderer.setXAxisMax(20);
        renderer.setXAxisMin(0);
        renderer.setYAxisMax(60);
        renderer.setYAxisMin(0);
    }
 
    private XYMultipleSeriesDataset getLinearChartDataset() {
        // TODO Auto-generated method stub
        XYMultipleSeriesDataset dataset=new XYMultipleSeriesDataset();
        for (int i = 0; i < SERIES_NR; i++) {
            XYSeries series=new XYSeries("Stock Trend---"+(i+1));
            int temp=10*i;
            int[][] data=getBasicData();
            for (int j = 0; j < data.length; j++) {
                int x=data[j][0];
                int y=temp+data[j][1];
                series.add(x, y);
            }
            dataset.addSeries(series);
        }
        return dataset;
    }
    private int[][] getBasicData() {
        int[][] data=new int[20][2];
        Random rand=new Random();
        for (int i = 0; i < data.length; i++) {
            data[i][0]=i;
            data[i][1]=20+rand.nextInt(20)%20;
        }
        return data;
    }
}

4. [文件] APieChart.java ~ 2KB     下载(116)     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.anjoyo.achartengine;
 
import org.achartengine.ChartFactory;
import org.achartengine.model.CategorySeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
 
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
 
public class APieChart {
    private double[] values = { 25, 30, 45 };
 
    public APieChart() {
        // TODO Auto-generated constructor stub
    }
 
    public APieChart(double[] values) {
        if (values.length == 3) {
            for (int i = 0; i < values.length; i++) {
                this.values[i] = values[i];
            }
        }
    }
    public Intent execute(Context context) {
        int[] colors={Color.BLUE, Color.GREEN, Color.YELLOW};
        DefaultRenderer renderer=buildCategoryRenderer(colors);
        renderer.setAntialiasing(true);//没有看出有啥效果来
        renderer.setApplyBackgroundColor(true);//设置背景颜色
        renderer.setBackgroundColor(Color.TRANSPARENT);
        renderer.setShowAxes(true);//
        renderer.setAxesColor(Color.GRAY);
        renderer.setClickEnabled(true);//设置了之后,不可再拖动
        renderer.setZoomButtonsVisible(true);//设置伸缩按钮是否可见
        renderer.setZoomEnabled(true);
        renderer.setExternalZoomEnabled(true);//设置是否可以向伸缩
        renderer.setLabelsColor(Color.GREEN);
        renderer.setLabelsTextSize(16);
//      renderer.setLegendHeight(50);
//      renderer.setPanEnabled(true);
        renderer.setStartAngle(180);//好像不好用啊
        CategorySeries series=new CategorySeries("Fruit Ratio");
        series.add("Apple", values[0]);
        series.add("Banana", values[1]);
        series.add("Orange", values[2]);
        return ChartFactory.getPieChartIntent(context, series, renderer, "水果");
    }
     
    private DefaultRenderer buildCategoryRenderer(int[] colors) {
        DefaultRenderer renderer=new DefaultRenderer();
        renderer.setApplyBackgroundColor(true);
        renderer.setBackgroundColor(Color.GRAY);
        renderer.setLabelsTextSize(20);
        renderer.setChartTitle("饼状图");
        renderer.setChartTitleTextSize(20);
        renderer.setLegendTextSize(20);
        renderer.setLegendHeight(50);
        for (int i = 0; i < colors.length; i++) {
            int j = colors[i];
            SimpleSeriesRenderer r=new SimpleSeriesRenderer();
            r.setColor(j);
            renderer.addSeriesRenderer(r);
        }
        return renderer;
    }
}

5. [文件] MainActivity.java ~ 3KB     下载(120)     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package com.anjoyo.achartengine;
 
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends Activity {
    private Button lineChartBtn;
    private Button areaChartBtn;
    private Button scatterChartBtn;
    private Button timeChartBtn;
    private Button barChartBtn;
    private Button pieChartBtn;
    private Button bubbleChartBtn;
    private Button doughnutChartBtn;
    private Button rangeBarChartBtn;
    private Button dialChartBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lineChartBtn=(Button) findViewById(R.id.line_chart);
        areaChartBtn=(Button) findViewById(R.id.area_chart);
        scatterChartBtn=(Button) findViewById(R.id.scatter_chart);
        timeChartBtn=(Button) findViewById(R.id.time_chart);
        barChartBtn=(Button) findViewById(R.id.bar_chart);
        pieChartBtn=(Button) findViewById(R.id.pie_chart);
        bubbleChartBtn=(Button) findViewById(R.id.bubble_chart);
        doughnutChartBtn=(Button) findViewById(R.id.doughnut_chart);
        rangeBarChartBtn=(Button) findViewById(R.id.range_bar_chart);
        dialChartBtn=(Button) findViewById(R.id.dial_chart);
        OnClickListener listener=new AChartEngineListener();
        lineChartBtn.setOnClickListener(listener);
        pieChartBtn.setOnClickListener(listener);
        barChartBtn.setOnClickListener(listener);
        bubbleChartBtn.setOnClickListener(listener);
    }
    class AChartEngineListener implements OnClickListener{
 
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (v.getId()) {
            case R.id.line_chart:
//              Intent intent=new Intent(MainActivity.this, LinearChartActivity.class);
//              startActivity(intent);
                Intent linearChartIntent=new ALinearChart().execute(MainActivity.this);
                startActivity(linearChartIntent);
                break;
            case R.id.area_chart:
                break;
            case R.id.scatter_chart:
                 
                break;
            case R.id.time_chart:
                 
                break;
            case R.id.bar_chart:
                Intent barChartIntent=new ABarChart().execute(MainActivity.this);
                startActivity(barChartIntent);
                break;
            case R.id.pie_chart:
                Intent pieChartIntent=new APieChart().execute(MainActivity.this);
                startActivity(pieChartIntent);
                break;
            case R.id.bubble_chart:
                Intent bubbleChartIntent=new ABubbleChart().execute(MainActivity.this);
                startActivity(bubbleChartIntent);
                break;
            case R.id.doughnut_chart:
                 
                break;
            case R.id.range_bar_chart:
                break;
            case R.id.dial_chart:
                 
                break;
 
            default:
                break;
            }
        }
         
    }
}

6. [文件] LinearChartActivity.java ~ 4KB悦德财富:https://www.yuedecaifu.com        

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.anjoyo.achartengine;
 
import java.util.Random;
 
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
 
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
 
public class LinearChartActivity extends Activity {
    private XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
    private XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
    private XYSeries currentSeries;
    private XYSeriesRenderer currentRenderer;
    private String dateFormat;
    private GraphicalView chartView;
 
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onRestoreInstanceState(savedInstanceState);
        dataset = (XYMultipleSeriesDataset) savedInstanceState
                .getSerializable("dataset");
        renderer = (XYMultipleSeriesRenderer) savedInstanceState
                .getSerializable("renderer");
        currentSeries = (XYSeries) savedInstanceState
                .getSerializable("current_series");
        currentRenderer = (XYSeriesRenderer) savedInstanceState
                .getSerializable("current_renderer");
        dateFormat = savedInstanceState.getString("date_format");
    }
 
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        outState.putSerializable("dataset", dataset);
        outState.putSerializable("renderer", renderer);
        outState.putSerializable("current_series", currentSeries);
        outState.putSerializable("current_renderer", currentRenderer);
        outState.putString("date_format", dateFormat);
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.stock_chart);
 
        String seriesTitle = "上证指数";
        XYSeries series = new XYSeries(seriesTitle);
        dataset.addSeries(series);
        currentSeries = series;
        XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();
        seriesRenderer.setColor(Color.BLUE);
        seriesRenderer.setFillBelowLine(true);
//      seriesRenderer.setFillBelowLineColor(Color.RED);//折线下面区域是否添加颜色
        seriesRenderer.setPointStyle(PointStyle.POINT);
        seriesRenderer.setLineWidth(3);
        renderer.addSeriesRenderer(seriesRenderer);
//      添加另外一条曲线图
//      seriesRenderer = new XYSeriesRenderer();
//      seriesRenderer.setColor(Color.GREEN);
//      seriesRenderer.setFillBelowLine(true);
//      seriesRenderer.setFillBelowLineColor(Color.YELLOW);
//      seriesRenderer.setPointStyle(PointStyle.POINT);
//      seriesRenderer.setLineWidth(3);
//      renderer.addSeriesRenderer(seriesRenderer);
         
        renderer.setYAxisMin(0);
        renderer.setYAxisMax(100);
        renderer.setXAxisMax(20);
        renderer.setShowGrid(false);
        renderer.setXLabels(20);
        renderer.setChartTitle("上证指数-24小时趋势图");
 
        currentRenderer = seriesRenderer;
        double x = 0;
        double y = 0;
        int[][] xyValues = getValues();
//      for (int i = 0; i < 2; i++) {
//         
            for (int j = 0; j < xyValues.length; j++) {
                x=xyValues[j][0];
                y=xyValues[j][1];
                currentSeries.add(x, y);
            }
//      }
    }
     
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        if(chartView == null){
            LinearLayout layout=(LinearLayout) findViewById(R.id.chart);
            chartView=ChartFactory.getLineChartView(this, dataset, renderer);
            layout.addView(chartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        }else {
            chartView.setBackgroundResource(R.id.chart);
            chartView.repaint();
        }
        super.onResume();
    }
 
    private int[][] getValues() {
        // TODO Auto-generated method stub
        int[][] xyValues = new int[20][2];
        Random rand=new Random();
        for (int i = 0; i < xyValues.length; i++) {
            xyValues[i][0]=i;
            xyValues[i][1]=rand.nextInt(100);
        }
        return xyValues;
    }
}

7. [文件] AndroidManifest.xml ~ 1KB   

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.anjoyo.achartengine"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppBaseTheme"
         >
        <activity
            android:name="com.anjoyo.achartengine.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
         
        <activity android:name=".LinearChartActivity"></activity>
        <activity android:name="org.achartengine.GraphicalActivity"></activity>
    </application>
</manifest>

posted on 2016-10-13 13:57  王晓九  阅读(254)  评论(0编辑  收藏  举报

导航