2012-10-22 3 views
2

XAxis를 achartEngine 형식으로 올바르게 만들려면 어떻게해야합니까? Date 값으로 X 축에 올바르게 날짜 값만 간격을 두길 원하지만 제대로 작동하지 않는 것 같습니다. android의 aChartEngine에서 XAxis 값을 올바르게 포맷하는 방법

내가 시도 것입니다 : 당신이 볼 수있는

enter image description here

이 제대로 간격되지 않습니다, 그들은 x 축에 있습니다

XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
    dataset.addSeries(series); 

    XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); 
    mRenderer.setBackgroundColor(Color.BLACK); 
    mRenderer.setApplyBackgroundColor(true); 
    mRenderer.setGridColor(Color.LTGRAY); 
    mRenderer.setXLabels(0); 
    // mRenderer.setMargins(new int[]{0, 20, 0, 0}); 

    XYSeriesRenderer renderer = new XYSeriesRenderer(); 
    //renderer.setDisplayChartValuesDistance(1); 
    renderer.setColor(Color.GREEN); 

    mRenderer.setXLabels(10); 
     if(date_value.length < 10){ //date_value is a large array of dates for the X-Axis 

      for(int i = 0; i < date_value.length; i++){ 
       mRenderer.addXTextLabel(i+1, date_value[i]);  
      } 

     } 

     else if(date_value.length > 10){ 

      int mod = date_value.length % 10; 
      int add_mod = mod; 
      int last = date_value.length; 

      mRenderer.addXTextLabel(0, date_value[0]); 

      for(int i=0; i < 10; i++){ 
       mRenderer.addXTextLabel(i, date_value[mod]); 

        mod+=add_mod; 


      } 
      mRenderer.setXLabelsAngle(90); 
      //mRenderer.addXTextLabel(date_value.length, date_value[last]); 

     } 
    /*get the last elements in the array and parse as double to set the maximum range for X*/ 
     Calendar ist = Calendar.getInstance(); 
     Calendar last = Calendar.getInstance(); 
     ist.setTime(formatter.stringToDateReport(date_value[0])); 
     last.setTime(formatter.stringToDateReport(date_value[date_value.length-1])); 

    mRenderer.setXAxisMin(ist.get(Calendar.DATE)); 
    mRenderer.setXAxisMax(last.get(Calendar.DATE)); 
    mRenderer.addSeriesRenderer(renderer); 
    chartView = ChartFactory.getLineChartView(context, dataset, mRenderer); 

return chartView; 

이 내가 무엇을 얻을 예를 들어 10, 15, 20 .. 원하지 않는 값을 가지면 어떻게됩니까? 고맙습니다. 다음 코드

답변

3

..... (PCM 16 비트)의 데이터 기록의 양 및 음의 값의 표시, 기록 차트이다

mRenderer.setXLabels(10); 

로서 당신은 다른 줄에있는 것처럼 setXLabels(0)하고 싶습니다. 나는이 코드가 AChartEngine에게 텍스트 라벨뿐만 아니라 10 개의 라벨을 시도하고 인쇄하도록 지시한다고 생각한다.

편집 : addXTextLabel()에 레이블을 지정할 x 위치의 매개 변수를 사용해야합니다. 그래서 renderer.addXTextLabel(date_value_that_should_have_a_string, date_value_string)

+0

은 원하지 않는 값을 제거하는 데 도움이되지만 날짜는 여전히 클러스터됩니다. 나는 그들을 밖으로 간격을 두는 것처럼 보일 수 없다. 어쨌든 고마워. – irobotxxx

0

는 광고를 제거한다 언뜻

public void onDraw(Canvas canvas) 
    {  

       paint.setColor(Color.WHITE); 
       canvas.drawLine(width/16+(width/8)+(width/100)-1,0,width/16+(width/8)+(width/100)-1,height, paint); 
       canvas.drawLine(0,height/2,width,height/2, paint); 

       canvas.drawText("32767",(width/20),height/30, paint); 
       canvas.drawText("0",(width/12),(height/2)+(height/80)-(height/2)/2, paint); 
       canvas.drawText("-32767",(width/25),height/2-height/50, paint); 

       canvas.drawText("32767",(width/20),height/2+height/50, paint); 
       canvas.drawText("0",(width/12),(height/2)+(height/80)+(height/2)/2, paint); 
       canvas.drawText("-32767",(width/25),height-height/30, paint); 

       paint.setColor(Color.GREEN); 


     for (i=0; i < second.par_second_data ; i++) 
     { 

      if (i >= 1) 
      { 
       canvas.drawLine(width/16+second.final_width-1+(width/8)+(width/100),(float) (height/2-(height/4)-(height/2*(second.audioData[i-1]-1200)/second.graph_y)),width/16+second.final_width+(width/8)+(width/100),(float) (height/2-(height/4)-(height/2*(second.audioData[i]-1200)/second.graph_y)), paint); 
       canvas.drawLine(width/16+second.final_width-1+(width/8)+(width/100),(float) (height/2+(height/4)-(height/2*(second.fftArray[i-1].re())/second.graph_z)),width/16+second.final_width+(width/8)+(width/100),(float) (height/2+(height/4)-(height/2*(second.fftArray[i].re())/second.graph_z)), paint); 

       //canvas.drawLine(width/16+second.final_width+(width/8)+(width/100),height/2-(height/4),width/16+second.final_width+(width/8)+(width/100),(float) (height/2-(height/4)-(height/2*(second.audioData[i]-1200)/second.graph_y)), paint); 
       //canvas.drawLine(width/16+second.final_width+(width/8)+(width/100),height/2+(height/4),width/16+second.final_width+(width/8)+(width/100),(float) (height/2+(height/4)-(height/2*(second.fftArray[i].re())/second.graph_z)), paint); 
      } 
       second.final_width=second.final_width+1; 
     } 
     second.final_width=0; 

    } 
+0

이것은 차트 엔진이 아니거나 그게 맞습니까? – irobotxxx

+0

canvas.drawText ("32767", (너비/20), 높이/30, 페인트)를 시도해야합니다. 동적으로? –

관련 문제