2014-02-19 7 views
1

저는 정말 Java에 익숙하지 않아 동적으로 그래프를 그릴 때 도움이 필요합니다. 내 Arduino에서 데이터를 수신하는 BLUWON을 사용하고 있습니다. BLuetoothChat 샘플 코드를 수정하여 광산에 맞게 수정했습니다. 필자가 알아야 할 유일한 방법은 String 배열에서 값을 추출하여 그래프에 동적으로 그릴 수있는 방법입니다.AChartEngine을 사용한 동적 플로팅에 대한 지침이 필요합니다.

Point.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()); 
} 
} 

(LineGraph.java의 addNewPoints 기능을위한 클래스)

LineGraph.java에서 : 나는 논문 코드로 남아있어까지 AChartEngine 사용에 대한 튜토리얼 떨어져 몇 가지 아이디어를했다
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; 
} 
} 

솔직히 나는 왜 포인트 클래스가 필요한지 또는 어떻게 사용해야하는지 잘 모르겠습니다.

내 메인 클래스에는 Bluetooth 연결이 설정 될 때 호출되는 핸들러에 MESSAGE_READ라는 사례가 있습니다. MESSAGE_READ 케이스의 코드가 계속해서 다른 클래스의 실행()에서 호출되기 때문에 반복 계속됩니다

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를 호출 할 때.

lineGraph의 그래프에 readMessage 값을 동적으로 표시하는 lineGraphPlot이라는 함수를 어떻게 작성할 수 있는지 알고 싶습니다. 미리 감사드립니다.

+0

어떻게 u는 메시지를 표시하고 싶어에서 achartengine의 샘플 코드는 모든 정보를 얻을 것이다 볼 수 있나요? 텍스트 뷰를 추가하고 테스트 값을 동적으로 업데이트 할 수 있습니다. – keshav

+0

그 방법을 알 수 있겠습니까? 감사합니다 – user3307418

+0

당신은 그래프 레이아웃 위에 텍스트 뷰를 추가하고 텍스트 메시지를 변경할 수 있습니다. 그리고 당신이 그래프에서 그것을하기를 원한다면 단지 주석 텍스트를 사용할 수 있습니다. – keshav

답변

관련 문제