问题描述
我已经用achartengine条形图,但是在图形绘制的值是静态的。我现在已经创建了使用SQLite数据库,我想利用数据库中的值绘制柱状图等,如果任何它绘制新值刷新间隔1分钟。我下面张贴我的code。请指导我如何修改code,这样我可以做到以上。我试过很多教程在线,但它并没有多大帮助。
包flu.solutions.travelsense;
进口的java.util.ArrayList;
进口的java.util.List;进口org.achartengine.ChartFactory;
进口org.achartengine.chart.BarChart.Type;
进口org.achartengine.model.CategorySeries;
进口org.achartengine.model.XYMultipleSeriesDataset;
进口org.achartengine.renderer.SimpleSeriesRenderer;
进口org.achartengine.renderer.XYMultipleSeriesRenderer;
进口org.achartengine.renderer.XYMultipleSeriesRenderer.Orientation;进口android.app.Activity;
进口android.content.Intent;
进口android.graphics.Color;
进口android.os.Bundle;
进口android.view.Menu;
公共类ChartActivity延伸活动{ @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); 意向意图= createIntent();
startActivity(意向); } 公共意向createIntent() { 的String []标题=新的String [] {十大旅游目的地,};
清单<双层[]>值=新的ArrayList<双层[]>();
values.add(新双[] {8,6,7,6,7,7,9,5,7,8,8});
values.add(新的双[] {}); INT [] =颜色INT新[] {Color.RED,Color.BLACK}; XYMultipleSeriesRenderer渲染= buildBarRenderer(颜色);
renderer.setOrientation(Orientation.HORIZONTAL); setChartSettings(渲染,十大旅游目的地,,,0,10,0,10,Color.GRAY,Color.GREEN); renderer.setXLabels(1);
renderer.setYLabels(10); renderer.addXTextLabel(1,班加罗尔);
renderer.addXTextLabel(2,迈索尔);
renderer.addXTextLabel(3,金奈);
renderer.addXTextLabel(4,德里);
renderer.addXTextLabel(5,加尔各答);
renderer.addXTextLabel(6,克什米尔);
renderer.addXTextLabel(7,海得拉巴);
renderer.addXTextLabel(8,孟买);
renderer.addXTextLabel(9,喀拉拉邦);
renderer.addXTextLabel(10,古吉拉特); INT长度= renderer.getSeriesRendererCount();
的for(int i = 0; I<长度;我+ +)
{
SimpleSeriesRenderer seriesRenderer = renderer.getSeriesRendererAt(ⅰ);
seriesRenderer.setDisplayChartValues(假);
} 返回ChartFactory.getBarChartIntent(这一点,buildBarDataset(标题,值),渲染,Type.DEFAULT);
} 保护XYMultipleSeriesRenderer buildBarRenderer(INT []颜色)
{ //创建一个SeriesRenderer并提供有用的默认值,以及颜色进行初始化 XYMultipleSeriesRenderer渲染器=新XYMultipleSeriesRenderer(); renderer.setAxisTitleTextSize(26); renderer.setChartTitleTextSize(20); renderer.setLabelsTextSize(15); renderer.setLegendTextSize(25); INT长度= colors.length; 的for(int i = 0; I<长度;我+ +)
{
SimpleSeriesRenderer R =新SimpleSeriesRenderer();
r.setColor(颜色[I]);
//r.setChartvalueAngle(-90);
r.setChartValuesSpacing(15);
renderer.addSeriesRenderer(R);
}
返回渲染器;
} 保护无效setChartSettings(XYMultipleSeriesRenderer渲染,字符串title,字符串xTitle,
串yTitle,双XMIN,双XMAX,双YMIN,双YMAX,诠释axesColor,诠释labelsColor)
{ //设置很多默认值的此渲染 renderer.setChartTitle(职称); renderer.setXTitle(xTitle);
renderer.setYTitle(yTitle); renderer.setXAxisMin(XMIN);
renderer.setXAxisMax(XMAX); renderer.setYAxisMin(YMIN);
renderer.setYAxisMax(YMAX); renderer.setAxesColor(axesColor);
renderer.setLabelsColor(labelsColor); renderer.setApplyBackgroundColor(真);
renderer.setBackgroundColor(Color.WHITE); (1)renderer.setBarSpacing; } 保护XYMultipleSeriesDataset buildBarDataset(的String []标题,列表与LT;双层[]>数值)
{ //添加轴标题和值到数据集 XYMultipleSeriesDataset数据=新XYMultipleSeriesDataset();
INT长度= titles.length; 的for(int i = 0; I<长度;我+ +)
{
CategorySeries系列=新CategorySeries(标题[I]);
双[] V = values.get(I)
INT seriesLength = v.length;
对于(INT K = 0; K< seriesLength; k ++)
{
series.add(ⅴ[K]);
} dataset.addSeries(series.toXYSeries());
}
返回的数据集;
} 公共布尔onCreateOptionsMenu(菜单菜单){
//充气菜单;如果是present这增加了项目操作栏。
。getMenuInflater()膨胀(R.menu.activity_chart,菜单);
返回true;
}
}
您可以使用以下:achartengine,AndroidPlot或charts4j。如果你想以编程方式做到这一点,那么这里是一个程序:
公共类BarchartsampleActivity延伸活动{
/ **当第一次创建活动调用。 * /静态XYMultipleSeriesDataset数据集;
静态XYMultipleSeriesRenderer渲染器;
静态XYSeriesRenderer rendererSeries;
静态CategorySeries系列;
静态GraphicalView mChartView;
串xvalstring1,xvalstring2,xvalstring3,xvalstring4,xvalstring5;
INT xvalint1,xvalint2,xvalint3,xvalint4,xvalint5;
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
的LinearLayout布局=(的LinearLayout)findViewById(R.id.linearlayout);
意向意图= getIntent();
。xvalstring1 = intent.getStringExtra(xvalstring1)的toString()修剪()。
。xvalstring2 = intent.getStringExtra(xvalstring2)的toString()修剪()。
。xvalstring3 = intent.getStringExtra(xvalstring3)的toString()修剪()。
。xvalstring4 = intent.getStringExtra(xvalstring4)的toString()修剪()。
。xvalstring5 = intent.getStringExtra(xvalstring5)的toString()修剪()。
xvalint1 =的Integer.parseInt(xvalstring1);
xvalint2 =的Integer.parseInt(xvalstring2);
xvalint3 =的Integer.parseInt(xvalstring3);
xvalint4 =的Integer.parseInt(xvalstring4);
xvalint5 =的Integer.parseInt(xvalstring5); 的String []标题=新的String [] {用户输入};
清单<双层[]> X =新的ArrayList<双层[]>();
x.add(新双[] {1,2,3,4,5});
清单<双层[]>值=新的ArrayList<双层[]>();
值
。新增(新的双[] {xvalint1,xvalint2,xvalint3,xvalint4,xvalint5});
数据=新XYMultipleSeriesDataset();
渲染=新XYMultipleSeriesRenderer();
renderer.setChartTitle(用户输入);
renderer.setXTitle(X);
renderer.setYTitle(Y);
renderer.setXLabelsAlign(Align.RIGHT);
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setXAxisMin(0);
renderer.setXAxisMax(10);
renderer.setYAxisMin(0);
renderer.setYAxisMax(40);
renderer.setClickEnabled(假);
renderer.setExternalZoomEnabled(假);
renderer.setZoomButtonsVisible(真);
renderer.setPanLimits(新的双[] {0,5,0,100});
renderer.setZoomLimits(新的双[] {-10,20,10,40});
renderer.setShowGrid(真);
/*renderer.setPanEnabled(false,FALSE);
renderer.setZoomEnabled(假,假); * /
renderer.setBarSpacing(1.5);
renderer.setLabelsColor(Color.BLUE);
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
renderer.setMargins(新INT [] {20,30,15,20});
renderer.setBackgroundColor(Color.GREEN);
renderer.setMarginsColor(Color.GREEN);
rendererSeries =新XYSeriesRenderer();
rendererSeries.setColor(Color.GREEN);
rendererSeries.setDisplayChartValues(真);
renderer.addSeriesRenderer(rendererSeries); 如果(mChartView == NULL){
Log.d(OnCreate中,如果(mChartView == NULL));
mChartView = ChartFactory.getBarChartView(这一点,mDataset(标题,
X,价值观),渲染,Type.DEFAULT);
layout.addView(mChartView,新的LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); }其他{
// mChartView.repaint();
Log.d(OnCreate中,如果(mChartView = NULL)!);
}
}
私人XYMultipleSeriesDataset mDataset(字符串[]冠军,
清单<双层[]> xValues,列表<双层[]> yValues){
// TODO自动生成方法存根
XYMultipleSeriesDataset数据集1 =新XYMultipleSeriesDataset();
addXYSeries(数据集1,标题,xValues,yValues,0);
返回数据集1;
}
私人无效addXYSeries(XYMultipleSeriesDataset数据集的String []冠军,
清单<双层[]> xValues,列表<双层[]> yValues,int标){
// TODO自动生成方法存根 INT长度= titles.length;
的for(int i = 0; I<长度;我++){
XYSeries系列=新XYSeries(标题[I],规模);
双[] = XV xValues.get(I)
双[] = YV yValues.get(I)
INT seriesLength = xV.length;
对于(INT K = 0; K< seriesLength; k ++){
series.add(XV [K],YV [K]); }
dataset.addSeries(系列);
}}
}
I have created a bar chart using achartengine but the values plotted in the graph is static. Now i have created a database using sqlite and i want to draw the bar chart using the values from the database and refresh it every 1 min so that it plots new values if any. I am posting my code below. Please guide me on how to modify the code so that i can do the above. I tried many tutorials online but it didnt help much.
package flu.solutions.travelsense;
import java.util.ArrayList;
import java.util.List;
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 org.achartengine.renderer.XYMultipleSeriesRenderer.Orientation;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
public class ChartActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = createIntent();
startActivity(intent);
}
public Intent createIntent()
{
String[] titles = new String[] { "Top 10 Destinations", " " };
List<double[]> values = new ArrayList<double[]>();
values.add(new double[] { 8, 6, 7, 6, 7, 7, 9, 5, 7, 8, 8 });
values.add(new double[] {});
int[] colors = new int[] { Color.RED, Color.BLACK};
XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);
renderer.setOrientation(Orientation.HORIZONTAL);
setChartSettings(renderer, "Top 10 Destinations", " ", " ", 0,10, 0,10, Color.GRAY, Color.GREEN);
renderer.setXLabels(1);
renderer.setYLabels(10);
renderer.addXTextLabel(1, "Bangalore");
renderer.addXTextLabel(2, "Mysore");
renderer.addXTextLabel(3, "Chennai");
renderer.addXTextLabel(4, "Delhi");
renderer.addXTextLabel(5, "Kolkatta");
renderer.addXTextLabel(6, "Kashmir");
renderer.addXTextLabel(7, "Hyderabad");
renderer.addXTextLabel(8, "Mumbai");
renderer.addXTextLabel(9, "Kerala");
renderer.addXTextLabel(10, "Gujarat");
int length = renderer.getSeriesRendererCount();
for (int i = 0; i < length; i++)
{
SimpleSeriesRenderer seriesRenderer = renderer.getSeriesRendererAt(i);
seriesRenderer.setDisplayChartValues(false);
}
return ChartFactory.getBarChartIntent(this, buildBarDataset(titles, values), renderer,Type.DEFAULT);
}
protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors)
{
// creates a SeriesRenderer and initializes it with useful default values as well as colors
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(26);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(25);
int length = colors.length;
for (int i = 0; i < length; i++)
{
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(colors[i]);
//r.setChartvalueAngle(-90);
r.setChartValuesSpacing(15);
renderer.addSeriesRenderer(r);
}
return renderer;
}
protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle,
String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor,int labelsColor)
{
// sets lots of default values for this renderer
renderer.setChartTitle(title);
renderer.setXTitle(xTitle);
renderer.setYTitle(yTitle);
renderer.setXAxisMin(xMin);
renderer.setXAxisMax(xMax);
renderer.setYAxisMin(yMin);
renderer.setYAxisMax(yMax);
renderer.setAxesColor(axesColor);
renderer.setLabelsColor(labelsColor);
renderer.setApplyBackgroundColor(true);
renderer.setBackgroundColor(Color.WHITE);
renderer.setBarSpacing(1);
}
protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values)
{
// adds the axis titles and values into the dataset
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
int length = titles.length;
for (int i = 0; i < length; i++)
{
CategorySeries series = new CategorySeries(titles[i]);
double[] v = values.get(i);
int seriesLength = v.length;
for (int k = 0; k < seriesLength; k++)
{
series.add(v[k]);
}
dataset.addSeries(series.toXYSeries());
}
return dataset;
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_chart, menu);
return true;
}
}
You could use the following: achartengine, AndroidPlot or charts4j. If you want to do it programmatically, then here is a program:
public class BarchartsampleActivity extends Activity {
/** Called when the activity is first created. */
static XYMultipleSeriesDataset dataset;
static XYMultipleSeriesRenderer renderer;
static XYSeriesRenderer rendererSeries;
static CategorySeries series;
static GraphicalView mChartView;
String xvalstring1,xvalstring2,xvalstring3,xvalstring4,xvalstring5;
int xvalint1,xvalint2,xvalint3,xvalint4,xvalint5;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout layout = (LinearLayout) findViewById(R.id.linearlayout);
Intent intent=getIntent();
xvalstring1=intent.getStringExtra("xvalstring1").toString().trim();
xvalstring2=intent.getStringExtra("xvalstring2").toString().trim();
xvalstring3=intent.getStringExtra("xvalstring3").toString().trim();
xvalstring4=intent.getStringExtra("xvalstring4").toString().trim();
xvalstring5=intent.getStringExtra("xvalstring5").toString().trim();
xvalint1=Integer.parseInt(xvalstring1);
xvalint2=Integer.parseInt(xvalstring2);
xvalint3=Integer.parseInt(xvalstring3);
xvalint4=Integer.parseInt(xvalstring4);
xvalint5=Integer.parseInt(xvalstring5);
String[] titles = new String[] { "USER INPUTS" };
List<double[]> x = new ArrayList<double[]>();
x.add(new double[] { 1, 2, 3, 4, 5});
List<double[]> values = new ArrayList<double[]>();
values
.add(new double[] { xvalint1,xvalint2,xvalint3,xvalint4,xvalint5 });
dataset = new XYMultipleSeriesDataset();
renderer = new XYMultipleSeriesRenderer();
renderer.setChartTitle("USER INPUTS");
renderer.setXTitle("X");
renderer.setYTitle("Y");
renderer.setXLabelsAlign(Align.RIGHT);
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setXAxisMin(0);
renderer.setXAxisMax(10);
renderer.setYAxisMin(0);
renderer.setYAxisMax(40);
renderer.setClickEnabled(false);
renderer.setExternalZoomEnabled(false);
renderer.setZoomButtonsVisible(true);
renderer.setPanLimits(new double[] { 0,5,0,100 });
renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });
renderer.setShowGrid(true);
/*renderer.setPanEnabled(false, false);
renderer.setZoomEnabled(false, false);*/
renderer.setBarSpacing(1.5);
renderer.setLabelsColor(Color.BLUE);
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
renderer.setMargins(new int[] {20, 30, 15, 20});
renderer.setBackgroundColor(Color.GREEN);
renderer.setMarginsColor(Color.GREEN);
rendererSeries = new XYSeriesRenderer();
rendererSeries.setColor(Color.GREEN);
rendererSeries.setDisplayChartValues(true);
renderer.addSeriesRenderer(rendererSeries);
if (mChartView == null) {
Log.d("Oncreate ", "if (mChartView == null)");
mChartView = ChartFactory.getBarChartView(this, mDataset(titles,
x, values), renderer, Type.DEFAULT);
layout.addView(mChartView, new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
} else {
// mChartView.repaint();
Log.d("Oncreate ", "if (mChartView != null)");
}
}
private XYMultipleSeriesDataset mDataset(String[] titles,
List<double[]> xValues, List<double[]> yValues) {
// TODO Auto-generated method stub
XYMultipleSeriesDataset dataset1 = new XYMultipleSeriesDataset();
addXYSeries(dataset1, titles, xValues, yValues, 0);
return dataset1;
}
private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles,
List<double[]> xValues, List<double[]> yValues, int scale) {
// TODO Auto-generated method stub
int length = titles.length;
for (int i = 0; i < length; i++) {
XYSeries series = new XYSeries(titles[i], scale);
double[] xV = xValues.get(i);
double[] yV = yValues.get(i);
int seriesLength = xV.length;
for (int k = 0; k < seriesLength; k++) {
series.add(xV[k], yV[k]);
}
dataset.addSeries(series);
}
}
}
这篇关于如何绘制在android系统的柱状图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!