ScrollView中的XYPlot(AndroidPlot库)不会出现

时间:2015-03-18 19:45:13

标签: android scrollview androidplot

我正在尝试将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-Axis labels cut off

当我将布局更改为:

<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 个答案:

答案 0 :(得分:2)

我有一个类似的问题。痛苦的部分是要意识到这个问题实际上结合了两个不同的问题。

1。)布局定义 在定义XYPlot的布局时,而不是android:layout_height="match_parent"定义您需要的dp值(类似android:layout_height="200dp"

2.)硬件加速 在检查logcat时,我注意到以下输出

  

W / View:视图太大而无法适应绘图缓存,需要10368000字节,只有8294400可用

快速搜索让我this stackoverflow topic。所以基本上我将android:hardwareAccelerated="false"添加到AndroidManifest.xml文件中的Activity。之后它起作用了,但是地狱很慢。我最终将androidplot.renderMode="use_background_thread"添加到XYPlot布局定义中,这些更改为我提供了诀窍。

希望这会有所帮助。

答案 1 :(得分:0)

在ScrollView中,添加android:fillViewport="true"。 然后,在您的XYPlot中,添加以下属性:

android:minWidth
android:minHeight

我已将我的minWidth和minHeight设置为XYPlot中的原始宽度和高度。这应该够了吧。我还手动将XYPlot的高度设置为250dp。不确定它是否有所作为。