2011-09-20 4 views
4

저는 Android 용 차트 엔진 0.7.0 차트 라이브러리를 사용하고 있습니다. 새로운 데이터가 수신 될 때마다 매초마다 동적으로 변경되는 작업 XY 차트가 있습니다. 그러나 꺾은 선형 차트를 왼쪽에서 오른쪽으로 그려 결국 결국 밖으로 이동합니다. 그려지는 새로운 데이터를 보는 유일한 방법은 차트보기를 오른쪽으로 스크롤하는 것입니다.Android aChartEngine XY 차트

누구든지 왼쪽에 새 데이터를 그리는 방법을 알고 있으므로 오래된 데이터가 결국보기 오른쪽에서 오른쪽으로 스크롤됩니다. 기본적으로 차트 선의 방향을 바꾸고 싶습니까?

답변

1

실제로 저는 ChartEngine의 동적 라인 차트의 자연스러운 흐름 방향을 결정했습니다. 선이 더 이상 화면 밖으로 스크롤되지 않도록 그래프 이미지를 잠글 수있었습니다. 그래프의 압축없이 일정 시간 간격을 유지하기 위해 serires 시작 부분에서 항목을 제거합니다. 실제로 실제로 잘 작동합니다. http://www.youtube.com/watch?v=mZMrOc5QaG0

+0

어떻게 x 축을 오른쪽에서 왼쪽으로 이동할 수 있습니까? plz 가이드 나를. –

3

내 코드 : onResume에서

private XYMultipleSeriesDataset HRDataset = new XYMultipleSeriesDataset(); 
private XYMultipleSeriesRenderer HeartRateRenderer = new XYMultipleSeriesRenderer(); 
private XYSeries HRCurrentSeries; 
private GraphicalView HRChartView; 

()에서 onCreate에서

if (HRChartView == null) { 
     LinearLayout layout = (LinearLayout) findViewById(R.id.HRchart); 
     HRChartView = ChartFactory.getLineChartView(this, HRDataset, HeartRateRenderer); 

     layout.addView(HRChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
     // boolean enabled = HRDataset.getSeriesCount() > 0; 
     // setSeriesEnabled(enabled); 
     } else { 
     HRChartView.repaint(); 
     } 

() :

HeartRateRenderer.setAxisTitleTextSize(16); 
    HeartRateRenderer.setChartTitleTextSize(20); 
    HeartRateRenderer.setLabelsTextSize(15); 
    HeartRateRenderer.setLegendTextSize(15); 
    HeartRateRenderer.setMargins(new int[] {20, 30, 15, 0}); 
    HeartRateRenderer.setAxesColor(Color.YELLOW); 

    String seriesTitle = "Heart Rate"; 
    XYSeries series = new XYSeries(seriesTitle); 

    HRDataset.addSeries(series); 
    HRCurrentSeries = series; 

    XYSeriesRenderer renderer = new XYSeriesRenderer(); 
    renderer.setColor(Color.RED); 
    HeartRateRenderer.addSeriesRenderer(renderer);  

나는 블루 치아 장치로부터 데이터를 수신하는 서비스를 . 내 레이아웃에

<activity android:name="org.achartengine.GraphicalActivity" /> 

: 매니페스트

public void setupHRChart(double x, double y) 
{ 

    HRCurrentSeries.add(x, y); 


    if (HRChartView != null) { 
     HRChartView.repaint(); 
    } 

} 

: 새로운 데이터가 도착하면 나는이 함수를 호출하는 데 도움이

<LinearLayout android:id="@+id/HRchart" android:orientation="horizontal" 
    android:layout_width="fill_parent" android:layout_height="300px" android:layout_weight="1" /> 

-Hope합니다.

+0

감사합니다. Damon, 정말 도움이되었습니다. –

+0

@Damon : 새로운 데이터를 수신 할 때마다 매초마다 동적으로 변경되는 XY 차트를 달성하는 데 도움이 될 수 있습니다. –

1

나는 또한이 솔루션

문제 눈에 보이는 특정 시간 범위를 유지하기 위해 일련의 시작 부분에서 항목을 제거입니다 :

여기에 행동에 차트를 보여주는 YouTube 동영상입니다 당신이 실제로 느슨한 데이터를 ...

다음과 같이 렌더러의 setXAxisMax 및 setXAxisMin을 사용하는 방법은 다음과 같습니다.

0) 값 XAxisMax 세트 (10)를 말하고 XTICK가> XAxisMax되면 가변 XTICK

2)의 "틱"카운트) 0

1에 XAxisMin 값을 설정

2.1)가)

3 + 1이었다 그래프 다시

T 렌더링 것에 XAxisMin)를

2.2 XTICK 설정 XAxisMax 세트 실제로 그래프의 "보이는 부분"을 이동 시키지만 (Xmin 및 Xmax로 재생하여), 데이터를 잃지 않습니다 (즉,이전 데이터 지점을 보려면 스크롤 할 수 있습니다.)

renderer.setXAxisMin(0.0); 
renderer.setXAxisMax(10); 
xTick = 0; 
lastMinX = 0; 
private void refreshChart(double lastValue) { 
/* check if we need to shift the x axis */ 
    if (xTick > getRenderer().getXAxisMax()) { 
     getRenderer().setXAxisMax(xTick); 
     getRenderer().setXAxisMin(++lastMinX); 
    } 
    series.add(xTick++, lastValue); 
    mChartView.repaint(); 
}