2014-02-19 22 views
1

我對Java真的很陌生,我需要幫助在同一個活動上動態繪製圖形。我正在使用藍牙從我的Arduino接收數據。我修改了適合我的BLuetoothChat示例代碼。我唯一需要知道的是如何從字符串數組中提取值並將其動態繪製在圖上。我脫下教程的一些想法上使用AChartEngine直到我留下了論文代碼:需要使用AChartEngine動態繪圖的指導

在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是一個公共靜態字符串,與Arduino的更新數值數據時MESSAGE_READ被調用。

我可以知道如何編寫一個名爲lineGraphPlot的函數,它將動態顯示LineGraph圖上的readMessage值?提前致謝。

+0

您是如何想顯示的消息?您可以添加文本視圖並動態更新測試值。 – keshav

+0

我可以知道如何做到這一點嗎?謝謝 – user3307418

+0

您可以在圖形佈局上方添加文本視圖並更改文本消息。如果您想在圖形上使用註釋文本,則可以在圖形上使用它。 – keshav

回答