2

我目前正在尝试使用 GraphView 库(http://www.jjoe64.com/p/graphview-library.html)绘制图表。我目前使用的是版本 3。

我对 BarChartGraph 中的 Bar 有疑问。我推送了一个 33 个元素的数组,但 char 在整个图中较小,在图中仍然是一个未使用的空间。

我附上了一张图片。

这是 XML 代码:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
    android:layout_height="fill_parent">

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <TextView android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/txtX" 
        android:text="X: 0" 
        android:textSize="15sp"></TextView>

    <TextView
        android:id="@+id/txtZ"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="39dp"
        android:text="Z: 0"
        android:textSize="15sp" />
    [....]

    <EditText
        android:id="@+id/et1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="39dp"
        android:ems="10"
        android:inputType="textMultiLine"
        android:focusable="false">
    </EditText>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="250dp"
        android:id="@+id/graph1" />

</LinearLayout>

这是主类中关于图形的代码:

  GraphViewData[] data;
    GraphView graphView;

     // Inizializzazioni utili per il grafico  
        data = new GraphViewData[(N/2)+1];  // N=64

        graphView = new BarGraphView(this, "example") {  //Prova a mettere primad di questo setHorizontalabe
            @Override
            protected String formatLabel(double value, boolean isValueX) {
                if (isValueX) {
                    return Double.toString(value);
                } else return super.formatLabel(value, isValueX); // let the y-value be normal-formatted
               }
            };

      LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);   
      layout.addView(graphView);

        for (int i=0; i<(N/2)+1; i++)
           data[i] = new GraphViewData(i, new_sig[i]);

      graphView.setBackgroundColor(Color.BLACK);

      graphView.addSeries(new GraphViewSeries(data));

      graphView.invalidate();
      graphView.redrawAll();

https://docs.google.com/open?id=0B5sm5aNTZkIiN1hrV1Q2MU9iYmM

我设置:

graphView.setViewPort(0, 33);

但什么都没有改变!

我也尝试使用较小的 ViewPort,但结果是一样的,就像这篇新帖子中的图像一样。在这种情况下,视口为 20:

graphView.setViewPort(0, 20);  

https://docs.google.com/open?id=0B5sm5aNTZkIiMFlSSFd1T1ViQ00

但图中怎么显示,还是一片空白!

我还尝试在 XML 文件中更改维度标签。我将“wrap_content”换成“match_parent”,但没有结果。然后我将更改为 match_parent,也更改为部分视图 LinearLayout,然后更改为 ScrollView。

我还尝试创建一系列 8 个数据(data.length=8),但结果是一样的,在图的右侧保留了相同的空白区域。

谢谢大家!:)

4

1 回答 1

2

也许您已经解决了这个问题,但它可以帮助其他人。我遇到过同样的问题。我在这里找到了解决方案。BarGraphView · 第 14 期 · jjoe64/GraphView · GitHub

您必须像这样修改库的源代码:

// BarGraphView.java
// float colwidth = (graphwidth - (2 * border)) / values.length;
float colwidth = graphwidth / values.length;

// GraphView.java
// horizontal labels + lines
int hors = horlabels.length;
for (int i = 0; i <= horlabels.length; i++) {
    paint.setColor(Color.DKGRAY);
    float x = ((graphwidth / hors) * i) + horstart;
    canvas.drawLine(x, height - border, x, border, paint);
    paint.setTextAlign(Align.CENTER);
    if (i < horlabels.length) {
        paint.setColor(Color.WHITE);
        canvas.drawText(horlabels[i], x + (graphwidth / hors) / 2,
                height - 4, paint);
    }
}

它对我很有效。我希望它有所帮助。

于 2013-07-19T07:44:34.867 回答