2013-03-19 98 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