需要使用AChartEngine进行动态绘图的指导



我对java真的很陌生,我需要帮助在同一活动上动态绘制图。我正在使用BLueooth从我的Arduino接收数据。我修改了BLueoothChat示例代码以适合我的情况。我唯一需要知道的是如何从String数组中提取值,并将其动态绘制在图上。我从一个关于使用AChartEngine的教程中提取了一些想法,直到我只剩下这些代码:

In-LineGraph.java

package com.example.fypapp;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.Point;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.content.Context;
import android.graphics.Color;
public class LineGraph {
private GraphicalView view;
private TimeSeries dataset = new TimeSeries("Force Sensor Reading");
private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();
private XYSeriesRenderer renderer = new XYSeriesRenderer(); //used for customizing
private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
@SuppressWarnings("deprecation")
public LineGraph()
{
//add single dataset to multiple dataset
mDataset.addSeries(dataset);
//Customization for line 1
renderer.setColor(Color.WHITE);
renderer.setPointStyle(PointStyle.CIRCLE);
renderer.setFillPoints(false);
//enable customization
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.TRANSPARENT);
mRenderer.setChartTitle("Force Sensor Readings From Device");
float textSize = 30, textSmaller = 20, angle = 270;
mRenderer.setChartTitleTextSize(textSize);
mRenderer.setZoomEnabled(true, false); 
//mRenderer.setZoomButtonsVisible(true);
mRenderer.setXTitle("Time (s)");
mRenderer.setYTitle("Grip force (kgf)");
mRenderer.setAxisTitleTextSize(textSize);
mRenderer.setYLabelsAngle(angle);
mRenderer.setLabelsTextSize(textSize);
mRenderer.setChartValuesTextSize(textSize);
mRenderer.setLegendTextSize(textSmaller);
mRenderer.setLabelsColor(Color.rgb(112, 128, 144)); //slate grey color
mRenderer.setAxesColor(Color.YELLOW);
mRenderer.setGridColor(Color.YELLOW);
mRenderer.setShowGrid(true);
mRenderer.setPanEnabled(true, false);

//adjusting margin width of y-axis (so y axis labels can be seen)
int[] i = mRenderer.getMargins();
i[0] += 50;//top
i[1] += 50;//left (increment here)
//i[2] = 0;//bottom
//i[3] = 0;//right   
mRenderer.setMargins(i);

//add single renderer to multiple renderer
mRenderer.addSeriesRenderer(renderer);
}
public GraphicalView getView(Context context)
{
view = ChartFactory.getLineChartView(context, mDataset, mRenderer);
return view;
}
public void addNewPoints(com.example.fypapp.Point p)
{
dataset.add(p.getX(), p.getY());
}
}

在Point.java(LineGraph.java中addNewPoints函数的类)中,

package com.example.fypapp;
public class Point {
private int x;
private int y;
public Point( int x, int y)
{
this.x = x;
this.y = y;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
}

老实说,我不太确定为什么需要点类或如何使用它。

在我的主类中,在建立蓝牙连接时调用的处理程序中有一个名为MESSAGE_READ的案例。MESSAGE_READ情况下的代码将保持循环,因为它是从另一个类中的run()连续调用的:

case MESSAGE_READ:
readMessage = (String) msg.obj;
if(readMessage != null)
{
Log.i(TAG, "Data sent is " + readMessage);
lineGraphPlot(readMessage); //a function I want to implement that plots the graph
}
count++;
break;

readMessage是一个公共静态字符串,当调用MESSAGE_READ时,它具有来自Arduino的更新的数字数据。

我可以知道如何编写一个名为lineGraphPlot的函数,该函数将在LineGraph的图形上动态显示readMessage值吗?提前谢谢。

您必须查看achartengine的示例代码,才能从中获得所有信息http://www.achartengine.org/content/goodies.html

最新更新