XYPlot (библиотека AndroidPlot) в ScrollView не отображается

Я пытаюсь поставить XYPlot (из библиотеки AndroidPlot http://androidplot.com/) в ScrollView контейнер, потому что в этом действии будет больше материала. К сожалению, все, что я получаю, это пустое место, где должна появиться диаграмма (когда я удаляю ScrollView это выглядит правильно).

Мой макет XML-файла:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    <com.androidplot.xy.XYPlot
        android:id="@+id/mySimpleXYPlot"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        androidPlot.title="A Simple XY Plot"
        androidPlot.domainLabel="Domain"
        androidPlot.rangeLabel="Range"
        androidPlot.titleWidget.labelPaint.textSize="@dimen/title_font_size"
        androidPlot.domainLabelWidget.labelPaint.textSize="@dimen/domain_label_font_size"
        androidPlot.rangeLabelWidget.labelPaint.textSize="@dimen/range_label_font_size"
        androidPlot.graphWidget.marginTop="20dp"
        androidPlot.graphWidget.marginLeft="15dp"
        androidPlot.graphWidget.marginBottom="30dp"
        androidPlot.graphWidget.marginRight="10dp"
        androidPlot.graphWidget.rangeLabelPaint.textSize="@dimen/range_tick_label_font_size"
        androidPlot.graphWidget.rangeOriginLabelPaint.textSize="@dimen/range_tick_label_font_size"
        androidPlot.graphWidget.domainLabelPaint.textSize="@dimen/domain_tick_label_font_size"
        androidPlot.graphWidget.domainOriginLabelPaint.textSize="@dimen/domain_tick_label_font_size"
        androidPlot.legendWidget.textPaint.textSize="@dimen/legend_text_font_size"
        androidPlot.legendWidget.iconSizeMetrics.heightMetric.value="15dp"
        androidPlot.legendWidget.iconSizeMetrics.widthMetric.value="15dp"
        androidPlot.legendWidget.heightMetric.value="25dp"
        androidPlot.legendWidget.positionMetrics.anchor="right_bottom"
        androidPlot.graphWidget.gridLinePaint.color="#000000"/>
    </LinearLayout>
 </ScrollView>

мой onCreate() метод:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    XYPlot plot = (XYPlot) findViewById(R.id.mySimpleXYPlot);


    Number[] series1Numbers = {1, 8, 5, 2, 7, 4};

    XYSeries series1 = new SimpleXYSeries(
            Arrays.asList(series1Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series1");                             

    LineAndPointFormatter series1Format = new LineAndPointFormatter();
    series1Format.setPointLabelFormatter(new PointLabelFormatter());
    series1Format.configure(getApplicationContext(),
            R.xml.line_point_formatter_with_plf1);

    plot.addSeries(series1, series1Format);

    plot.setTicksPerRangeLabel(3);
    plot.getGraphWidget().setDomainLabelOrientation(-45);

}

Это пример из QuickStart Tutorial, слегка усеченный. Я уже проверил этот ответ: Androidplot - метки оси X обрезаны

Когда я меняю макет на:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    <com.androidplot.xy.XYPlot
        android:id="@+id/mySimpleXYPlot"
        android:layout_width="match_parent"
        android:layout_height="match_parent" .../>

и добавить несколько TextView виджеты, диаграмма появляется, но я не могу прокрутить, чтобы увидеть их. Наконец, когда я добавляю больше TextView виджеты (вроде много), график не появляется снова, но я вижу все TextView виджеты и прокрутите, чтобы увидеть все из них.

Кто-нибудь может помочь?

2 ответа

Решение

У меня была несколько похожая проблема. Самым болезненным было понять, что эта проблема на самом деле объединяет две отдельные проблемы.

1.) Определение макета При определении макета для XYPlot вместо android:layout_height="match_parent" определите значение dp, которое вам нужно (что-то вроде android:layout_height="200dp")

2.) Аппаратное ускорение При проверке logcat я заметил следующий вывод

W/View﹕ Просмотр слишком большой, чтобы поместиться в кэш чертежа, требуется 10368000 байт, доступно только 8294400

Быстрый поиск привел меня к этой теме. Так что в основном я добавил android:hardwareAccelerated="false" в активность в файле AndroidManifest.xml. После этого это сработало, но было чертовски медленно. Я закончил с добавлением androidplot.renderMode="use_background_thread" для определения макета XYPlot, и эти изменения сделали свое дело для меня.

Надеюсь, это поможет.

В вашем ScrollView добавьте android:fillViewport="true", Затем в свой XYPlot добавьте эти атрибуты:

android:minWidth
android:minHeight

Я установил для minWidth и minHeight исходную ширину и высоту в XYPlot. Это должно делать свое дело. Я также вручную установил высоту моего XYPlot на 250dp, Не уверен, если это имеет значение.

Другие вопросы по тегам