График Achartengine изначально не отображается

Сейчас я использую библиотеку aChartEngine в своем проекте Android. Это работает хорошо до сих пор. Одна вещь, которую я не могу понять, - это то, как ее сначала отобразить. Единственный способ показать мои данные — щелкнуть и переместиться где-нибудь на графике или нажать кнопки масштабирования. Так изначально отображаются кнопки масштабирования, но не сам график. Я искал методы рендерера, но ничего не получилось. Я вызываю mSeriesRenderer.setShowGrid(true); после того, как мой рендерер создан, и он не отображается. Я также пытался repaint(), и даже это не работает. Я звоню не в то время?

public void onResume()
{
    if(mMeterObs.getGraph() == null)
    {
        LinearLayout layout = (LinearLayout)findViewById(R.id.chart);
        mMeterObs.setGraph(ChartFactory.getLineChartView(this, mMeterObs.getMultipleSeries(), mMeterObs.getSeriesRenderer()));
        layout.addView(mMeterObs.getGraph(), LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        mMeterObs.repaint();
    }
    else
        mMeterObs.repaint();
}

mMeterObs.getMultipleSeries() и mMeterObs.getSeriesRenderer() изначально пусты, но они все равно должны отображать сетку и оси, верно?

В конструкторе для mMeterObs я вызываю это:

mSeriesRenderer.setXLabels(12);
    mSeriesRenderer.setYLabels(10);
    mSeriesRenderer.setShowGrid(true);
    mSeriesRenderer.setXLabelsAlign(Align.RIGHT);
    mSeriesRenderer.setYLabelsAlign(Align.RIGHT);
    mSeriesRenderer.setZoomButtonsVisible(true);
    mSeriesRenderer.setRange(new double[] { 0.0, 10.0, -1.0, 1.0 });
    //mSeriesRenderer.setPanEnabled(true);
    mSeriesRenderer.setZoomLimits(new double[] { -10, 20, -10, 40 });
    mSeriesRenderer.setGridColor(Color.LTGRAY);
    mSeriesRenderer.setShowGrid(true);
    mSeriesRenderer.setShowAxes(true);
    mSeriesRenderer.setPointSize(.5f);

person trevor-e    schedule 27.06.2012    source источник
comment
Состояние if(mMeterObs.getGraph() == null) выглядит подозрительно. Почему бы не вызвать layout.addView() в onCreate() вместо onResume()?   -  person Dheeraj Vepakomma    schedule 27.06.2012
comment
Также внедрите mMeterObs.getMultipleSeries() и mMeterObs.getSeriesRenderer() FWIW.   -  person Dheeraj Vepakomma    schedule 27.06.2012
comment
Сначала у меня было так, но один из найденных мной вопросов SO предложил поместить его в onResume(). Что вы имеете в виду под своим вторым комментарием?   -  person trevor-e    schedule 27.06.2012
comment
Если LinearLayout находится в ScrollView, вы должны позвонить renderer.setInScroll(true);. Также заполните диаграмму некоторыми значениями для начала и проверьте.   -  person Dheeraj Vepakomma    schedule 27.06.2012
comment
LinearLayout — это корневой вид. Я совершенно уверен, что сузил проблему до того, что у XYSeries не было никаких данных, пока я не начал их собирать. Надеялся, что есть обходной путь. :\   -  person trevor-e    schedule 27.06.2012


Ответы (1)


Я предлагаю вам добавить несколько серий с данными. Сетки отображаются только вдоль меток, а у вас меток нет.

person Dan D.    schedule 27.06.2012
comment
Ну, я надеюсь, что сначала он будет отображаться, чтобы пользователь знал, что график доступен, а затем позволить пользователю добавлять источники данных в график. Таким образом, все начинается без ряда данных, а затем пользователь добавляет все, что хочет. Кажется странным, что я не могу отобразить пустую сетку, не имея ряда данных. - person trevor-e; 28.06.2012
comment
Вы пробовали демонстрационную программу, которую предоставляет ACE? Если вы запустите его и выберете демо-версию встроенной линейной диаграммы, вы не увидите никакой диаграммы. Нажмите «Новая серия», и вы увидите оси. Это потому, что была добавлена ​​пустая серия. Просто добавьте пустую серию, и вы увидите оси. - person Dan D.; 28.06.2012
comment
Добавление пустой серии сработало, хотя теперь есть пустая запись легенды, которую я пытаюсь удалить. Я отмечу это как правильное, хотя. - person trevor-e; 29.06.2012
comment
renderer.setShowLegend(false); - person Dan D.; 29.06.2012
comment
XYSeriesRenderer, похоже, не имеет такого метода. Я просто установил черный цвет в качестве быстрого хака, и на данный момент этого достаточно. :\ - person trevor-e; 29.06.2012