Android開發(fā)中使用achartengine繪制各種圖表的方法
本文實(shí)例講述了Android開發(fā)中使用achartengine繪制各種圖表的方法。分享給大家供大家參考,具體如下:
1. ABarChart.java
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
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);//設(shè)置背景顏色 renderer.setBackgroundColor(Color.TRANSPARENT); renderer.setShowAxes(true);// renderer.setAxesColor(Color.GRAY); renderer.setClickEnabled(true);//設(shè)置了之后,不可再拖動(dòng) renderer.setZoomButtonsVisible(true);//設(shè)置伸縮按鈕是否可見 renderer.setZoomEnabled(true); renderer.setExternalZoomEnabled(true);//設(shè)置是否可以向伸縮 renderer.setLabelsColor(Color.GREEN); renderer.setLabelsTextSize(16); } }
3. ALinearChart.java
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
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);//設(shè)置背景顏色 renderer.setBackgroundColor(Color.TRANSPARENT); renderer.setShowAxes(true);// renderer.setAxesColor(Color.GRAY); renderer.setClickEnabled(true);//設(shè)置了之后,不可再拖動(dòng) renderer.setZoomButtonsVisible(true);//設(shè)置伸縮按鈕是否可見 renderer.setZoomEnabled(true); renderer.setExternalZoomEnabled(true);//設(shè)置是否可以向伸縮 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
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
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 = "上證指數(shù)"; 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);//折線下面區(qū)域是否添加顏色 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("上證指數(shù)-24小時(shí)趨勢(shì)圖"); 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
<?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>
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android圖形與圖像處理技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android中使用achartengine生成圖表的具體方法
- Android listView 繪制表格實(shí)例詳解
- Android中使用ListView繪制自定義表格技巧分享
- Android開發(fā)筆記之:在ImageView上繪制圓環(huán)的實(shí)現(xiàn)方法
- Android百度地圖實(shí)現(xiàn)搜索和定位及自定義圖標(biāo)繪制并點(diǎn)擊時(shí)彈出泡泡
- Android編程開發(fā)之在Canvas中利用Path繪制基本圖形(圓形,矩形,橢圓,三角形等)
- Android開發(fā) OpenGL ES繪制3D 圖形實(shí)例詳解
- Android編程繪制圓形圖片的方法
- Android QQ登錄界面繪制代碼
- 解決Android SurfaceView繪制觸摸軌跡閃爍問題的方法
- Android自定義View之繼承TextView繪制背景
相關(guān)文章
Android基礎(chǔ)知識(shí)之frame動(dòng)畫效果
Android基礎(chǔ)知識(shí)之tween動(dòng)畫效果,Android一共提供了兩種動(dòng)畫,這篇文章主要介紹了Android動(dòng)畫效果之frame動(dòng)畫,感興趣的小伙伴們可以參考一下2016-06-06Android使用RecyclerView實(shí)現(xiàn)投票系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Android使用RecyclerView實(shí)現(xiàn)投票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11Android中使用Gradle來構(gòu)建App項(xiàng)目的入門指南
Gradle是Java世界中一個(gè)高人氣自動(dòng)化構(gòu)建工具,在安卓開發(fā)領(lǐng)域同樣備受追捧,這里為大家?guī)鞟ndroid中使用Gradle來構(gòu)建App項(xiàng)目的入門指南,來看看Gradle的作用與基本結(jié)構(gòu).2016-06-06MVVMLight項(xiàng)目的綁定及各種使用場(chǎng)景示例分析
這篇文章主要為大家介紹了MVVMLight項(xiàng)目中的綁定及綁定的各種使用場(chǎng)景示例源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步除夕快樂2022-01-01輕松實(shí)現(xiàn)Rxjava定時(shí)器功能
這篇文章主要為大家詳細(xì)介紹了Rxjava實(shí)現(xiàn)定時(shí)器功能的兩種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06android開發(fā)教程之實(shí)現(xiàn)listview下拉刷新和上拉刷新效果
這篇文章主要介紹了android實(shí)現(xiàn)listview下拉刷新和上拉刷新效果,Android的ListView上拉下拉刷新,原理都一樣,在Touch事件中操作header/footer的paddingTop屬性,需要的朋友可以參考下2014-02-02利用Android中BitmapShader制作自帶邊框的圓形頭像
這篇文章給大家介紹了一下如何利用BitmapShader制作圓形頭像,可以自定義要顯示的圖片,邊框顏色和邊框?qū)挾鹊?,有需要的朋友們可以參考借鑒。2016-09-09