2014-02-19 4 views
2

Я использую библиотеку AChartEngine для построения графиков в моем приложении. В реализации Bar Graph я включил горизонтальную панорамирование. Кроме того, я показываю график в Относительном макете одного из моих действий. Проблема в том, что, когда я прокручиваю горизонтально по оси Y, полосы перемещаются за ось Y, что кажется очень неудобным. Код показан ниже.AChartEngine гистограмма прокрутки за ось Y

public GraphicalView setTheBarGraph(String title) { 
     String[] titles = new String[] { "WiFi", "Mobile Network" }; 
     int[] colors = new int[] { Color.rgb(51, 102, 153), 
       Color.rgb(153, 51, 102) }; 
     double[] limits = new double[] { 0, 12, 0, 0 }; 
     XYMultipleSeriesRenderer renderer = buildBarRenderer(colors); 
     if (title.equals("Month")) 
      setChartSettings(renderer, "", title, "Usage" + "(" + monthSize 
        + ")", 0, usageValues.size() + 1, 0, totalMax, 
        Color.rgb(108, 122, 125), Color.rgb(108, 122, 125)); 
     else if (title.equals("Day")) 
      setChartSettings(renderer, "", title, 
        "Usage" + "(" + daySize + ")", 0, usageValues.size() + 1, 
        0, totalMax, Color.rgb(108, 122, 125), 
        Color.rgb(108, 122, 125)); 
     renderer.getSeriesRendererAt(0).setDisplayChartValues(true); 
     renderer.getSeriesRendererAt(1).setDisplayChartValues(true); 
     renderer.getSeriesRendererAt(0).setChartValuesTextSize(18); 
     renderer.getSeriesRendererAt(1).setChartValuesTextSize(18); 
     renderer.setPanLimits(limits); 
     renderer.setXLabels(0); 
     renderer.setYLabels(12); 
     for (int i = 0; i < monthList.size(); i++) { 
      renderer.addXTextLabel(i + 1, monthList.get(i)); 
     } 
     renderer.setInScroll(true); 
     renderer.setXLabelsAlign(Align.LEFT); 
     renderer.setYLabelsAlign(Align.RIGHT); 
     renderer.setXLabelsColor(Color.rgb(108, 122, 125)); 
     renderer.setYLabelsColor(0, Color.rgb(108, 122, 125)); 
     renderer.setXLabelsPadding(5); 
     renderer.setYLabelsPadding(5); 
     renderer.setPanEnabled(true, false); 
     renderer.setApplyBackgroundColor(true); 
     renderer.setBackgroundColor(Color.TRANSPARENT); 
     renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01)); 
     renderer.setZoomEnabled(false); 
     renderer.setYLabelsAngle(20); 
     // renderer.setZoomRate(1.1f); 
     renderer.setBarSpacing(0.5); 
     return ChartFactory.getBarChartView(mbcContext, 
       buildBarDataset(titles, usageValues), renderer, Type.DEFAULT); 
    } 

    protected void setChartSettings(XYMultipleSeriesRenderer renderer, 
      String title, String xTitle, String yTitle, double xMin, 
      double xMax, double yMin, double yMax, int axesColor, 
      int labelsColor) { 
     renderer.setChartTitle(title); 
     renderer.setXTitle(xTitle); 
     renderer.setYTitle(yTitle); 
     renderer.setXAxisMin(xMin); 
     renderer.setXAxisMax(xMax); 
     renderer.setYAxisMin(yMin); 
     renderer.setYAxisMax(yMax); 
     renderer.setAxesColor(axesColor); 
     renderer.setLabelsColor(labelsColor); 
     renderer.setMargins(new int[] { 35, 60, 30, 20 }); 
    } 

    protected XYMultipleSeriesDataset buildBarDataset(String[] titles, 
      List<double[]> values) { 
     XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
     int length = titles.length; 
     for (int i = 0; i < length; i++) { 
      CategorySeries series = new CategorySeries(titles[i]); 
      double[] v = values.get(i); 
      int seriesLength = v.length; 
      for (int k = 0; k < seriesLength; k++) { 
       series.add(v[k]); 
      } 
      dataset.addSeries(series.toXYSeries()); 
     } 
     return dataset; 
    } 

    protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) { 
     XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 
     renderer.setAxisTitleTextSize(22); 
     renderer.setChartTitleTextSize(22); 
     renderer.setLabelsTextSize(17); 
     renderer.setLegendTextSize(22); 
     int length = colors.length; 
     for (int i = 0; i < length; i++) { 
      SimpleSeriesRenderer r = new SimpleSeriesRenderer(); 
      r.setColor(colors[i]); 
      renderer.addSeriesRenderer(r); 
     } 
     return renderer; 
    } 

Я загрузил моментальный снимок этой проблемы. Пожалуйста помоги.

enter image description here

+0

добавьте последнюю версию – Avinash

ответ

2

Ну, после двух дней ломать голову, я наконец понял, проблема.

renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01)); 

Приведенный выше код устанавливает прозрачность поля поля. Это приведет к тому, что панель будет видна даже после осевых линий. Это совершенно неприемлемо. Бары не должны перемещаться за осевые линии независимо от цвета поля.

1

Похоже, что вы используете старую версию AChartEngine. Я предлагаю вам перейти на последнюю версию 1.2.0.

+0

R u заявив, что эта проблема существует в предыдущих версиях? В настоящее время я использую версию 1.1.0. – madhu

+0

Эти проблемы существуют в предыдущих версиях? Я использую версию 1.1.0. Является ли 1.2.0 официальным релизом или тестовым выпуском? – madhu

+0

Это ночная сборка. –

-2

Вы попробуйте это renderer.setPanEnabled(false, false);

+0

@Abhijith U не может прокручивать график без включения «renderer.setPanEnabled». – Avinash

Смежные вопросы