2013-03-19 101 views
2

我對android開發人員特別是Graph很新穎。現在我使用AchartEngine庫創建以下圖表,但我有以下問題:如何用條形圖橢圓化y軸標籤使用achartengine

Q-1。我想顯示左側固定寬度和剩餘內容的省略號標籤。

Q-2當我要將方向從縱向改爲橫向時,圖形顯示如下圖所示。如何爲圖表設置最佳佈局?

Q-3如何在X軸上設置0 1 2 3 ... 10?

我寫了下面這個圖碼:)

createLayoutMethod(:

/**創建圖形佈局**/

@SuppressWarnings("deprecation") 
private void createGraphLayout() { 
    // TODO Auto-generated method stub 
    /** Initialixation for Graph */ 
    /** objext of dataset which is put on Graph*/ 
    dataset = new XYMultipleSeriesDataset(); 
    series = new CategorySeries("Number of Customer"); 


    renderer = new XYSeriesRenderer(); 
    //renderer.setColor(Color.rgb(0, 168, 240)); 

    mRenderer = new XYMultipleSeriesRenderer(); 

    /** Setting for Renderer **/ 
    mRenderer.setLabelsColor(Color.BLACK); 
    mRenderer.setBackgroundColor(Color.WHITE); 
    mRenderer.setOrientation(Orientation.VERTICAL); 
    mRenderer.setClickEnabled(true); 
    mRenderer.setLegendTextSize(15); 
    mRenderer.setLabelsTextSize(13); 
    mRenderer.setApplyBackgroundColor(true); 
    mRenderer.setMargins(new int[] {10,10,200,10}); 

    mRenderer.setMarginsColor(Color.WHITE); 
    mRenderer.setInScroll(true); 

    mRenderer.setPanEnabled(true, false); 
    mRenderer.setScale(1); 
    mRenderer.setXLabelsAlign(Align.RIGHT);   // alignment of label x 
    mRenderer.setXAxisMax(offer.length()); 
    mRenderer.setYLabelsAlign(Align.CENTER);  // alignment of label y 
    mRenderer.setXLabelsColor(Color.BLACK);   // color of label x 
    mRenderer.setYLabelsColor(0, Color.BLACK);  // color of label y 

    mRenderer.setLegendHeight(60); 
    mRenderer.setDisplayChartValues(true); 

    mRenderer.setYAxisMax(offer.length()); 

    mRenderer.addSeriesRenderer(renderer); 

} 

putDataOnGraph(): JSON DATA的放在圖上:

private void putDataOnGraph() { 
     // TODO Auto-generated method stub 
     try { 

      for(int forOffer = 0; forOffer < offer.length(); forOffer++) 
      { 
       no_cust = 0; 
       for(int forCust = 0; forCust < customer.length(); forCust++) 
       { 
        if(offer.getJSONObject(forOffer).getInt("id") == customer.getJSONObject(forCust).getInt("offerId") && customer.getJSONObject(forCust).getInt("status") == 1) 
         no_cust = no_cust+1; 
       } 

       /** Check for x-axis maximum than customer **/ 
       maxX = no_cust > maxX ? no_cust : maxX; 

       mRenderer.setXLabels(0); 
       mRenderer.addXTextLabel(forOffer+1,offer.getJSONObject(forOffer).getString("offerTitle")); 


       //Log.d("msg", ""+offer.getJSONObject(forOffer).getString("offerTitle") +" : "+no_cust); 
       //Log.d("msg", ""+maxX); 
       series.add(no_cust); 
      } 
      mRenderer.setYAxisMax(maxX); 
      dataset.addSeries(series.toXYSeries()); 


     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
圖10

圖片(人像): Protrait Image with bar-chart

圖形圖像(風景): Landscape Image with bar-chart

請給我建議如何解決這個問題?

在此先感謝....

+0

我建議你寫簡短的問題,而不是一個大的有很多的信息。 – 2013-03-19 12:38:19

+0

對不起@丹但請給一些解決方案,如果你有... – 2013-03-19 12:40:19

+0

嘿@丹我已經使用** achartengine **爲Android,但它可能無法在Android 4.0.1。 有沒有解決方案。? – 2013-03-19 13:21:57

回答

1

對於Q1,你將不得不以像素爲單位計算標籤寬度,並只添加適合所需寬度的標籤寬度。 AChartEngine不會爲你做到這一點。

1
/** For creating lable, display 10 char if length is > 10 **/ 

// getting String from JSON 
lable = offer.getJSONObject(forOffer).getString("offerTitle"); 

//if string length is grater than 10 then display only first 10 char 
if(lable.length() > 10) 
{ 
    lable = lable.substring(0, 9); 
} 

mRenderer.addXTextLabel(forOffer+1,lable); 

我已經全文顯示在敬酒時,用戶點擊該

+1

沒有丹,你的答案是最好的。好的。 – 2013-03-26 10:20:42

+1

@丹pratik butani是他想交朋友的老實人 – UnderGround 2013-06-05 05:54:32