3

AChartEngine を数週間使用していますが、先週の時点ではすべて正常に機能していました。何を変更したのか本当にわかりませんが、グラフが画面に表示されません。MyActivityは、グラフの空の Layout 属性で初期化します。ある時点で、ユーザーが入力を読み取り、グラフが更新されます。

これが私のグラフの XML コードです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:background="@drawable/eti1"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:weightSum="11" >

    <LinearLayout
        android:id="@+id/wavesOptions"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal"
        android:gravity="center"
        android:weightSum="8" >


        <!-- 

        Unrelated spinners/checkboxes

        -->
    <ScrollView
        android:layout_width="fill_parent"
        android:id="@+id/graphScroll"
        android:layout_height="wrap_content"
        android:layout_above="@id/wavesOptions"
        android:layout_alignParentTop="true" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

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

    </ScrollView>
</RelativeLayout>

以下は、Eclipse に表示されている私のレイアウトの写真です。ビューの上部にある青色で囲まれたボックスは、グラフが表示される場所です。小さく見えますが、私wrap_contentは高さに使用するので、親と一致する必要があります。Java コードでグラフをそのビューに設定すると、何も変化しません。すべてのチェックボックスが更新され、新しいスピナーが正しく追加されます。

ここに画像の説明を入力

以下は私の.javaファイルからの私のコードです:

public void onCreate( Bundle savedInstanceState ) {
    super.onCreate( savedInstanceState );
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView( R.layout.waves );

    renderer = new XYMultipleSeriesRenderer( 2 ); 

}

ユーザーがグラフ化する情報を呼び出すと、呼び出された配列にデータが格納されwaveResults、メソッドupdateGraph()が呼び出されます。graphView がレイアウトに設定されている重要な部分は、一番下にあります。

public void updateGraph() {
    int num = 166;
    renderer = new XYMultipleSeriesRenderer( 2 );
    dataset = new XYMultipleSeriesDataset();

    // NetV1
    netV1Series = new XYSeries( "Net V1", 0 );
    // NetV2
    netV2Series = new XYSeries( "Net V2", 0 );
    // NetV3  
    netV3Series = new XYSeries( "Net V3", 0 );
    // VDI1
            // VDI2
            // VDI3
    if( spinnerChoice == 0 ) {
        vdi1Series = new XYSeries( "Diff V1", 1 );
        vdi2Series = new XYSeries( "Diff V2", 1 );
        vdi3Series = new XYSeries( "Diff V3", 1 );
    } else {
        vdi1Series = new XYSeries( "Curr 1", 1 );
        vdi2Series = new XYSeries( "Curr 2", 1 );
        vdi3Series = new XYSeries( "Curr 3", 1 );
    }

    dataset.addSeries( netV1Series );
    dataset.addSeries( netV2Series );
    dataset.addSeries( netV3Series );
    dataset.addSeries( vdi1Series );
    dataset.addSeries( vdi2Series );
    dataset.addSeries( vdi3Series );
    netV1Renderer = new XYSeriesRenderer();
    netV1Renderer.setColor( Color.WHITE );
    netV2Renderer = new XYSeriesRenderer();
    netV2Renderer.setColor( Color.YELLOW );
    netV3Renderer = new XYSeriesRenderer();
    netV3Renderer.setColor( Color.BLUE );
    vdi1Renderer = new XYSeriesRenderer();
    vdi1Renderer.setColor( Color.RED );
    vdi2Renderer = new XYSeriesRenderer();
    vdi2Renderer.setColor( Color.CYAN );
    vdi3Renderer = new XYSeriesRenderer();
    vdi3Renderer.setColor( Color.GRAY );
    renderer.addSeriesRenderer( netV1Renderer );
    renderer.addSeriesRenderer( netV2Renderer );
    renderer.addSeriesRenderer( netV3Renderer );
    renderer.addSeriesRenderer( vdi1Renderer );
    renderer.addSeriesRenderer( vdi2Renderer );
    renderer.addSeriesRenderer( vdi3Renderer );     

    renderer.setAxesColor( Color.DKGRAY );
    renderer.setPointSize( 14 );
    renderer.setApplyBackgroundColor( true );
    renderer.setBackgroundColor( Color.BLACK );
    renderer.setMarginsColor( Color.BLACK );
    renderer.setChartTitle( "Waves" );
    renderer.setShowGrid( true );
    renderer.setXLabels( 10 );
    renderer.setYLabels( 7 );
    renderer.setXLabelsAlign(Align.RIGHT);
    renderer.setYLabelsAlign(Align.RIGHT, 0);
    renderer.setZoomButtonsVisible( false );
    renderer.setPanEnabled( false, false );
    renderer.setZoomEnabled( false, false );
    renderer.setLabelsColor(Color.WHITE);
    renderer.setXLabelsColor(Color.WHITE);
    renderer.setYLabelsColor(0, Color.WHITE);
    renderer.setYLabelsColor(1, Color.WHITE);

    if( spinnerChoice == 0 ) {
        renderer.setYTitle("Diff Volts", 1);
    } else {
        renderer.setYTitle( "Current", 1 );
    }
    renderer.setYTitle( "Net Volts", 0 );

    renderer.setYAxisAlign( Align.LEFT, 0 );
    renderer.setYAxisAlign(Align.RIGHT, 1);
    renderer.setYLabelsAlign(Align.LEFT, 1);


    graphLayout = (LinearLayout) findViewById( R.id.graph1 );
    graphLayout.removeAllViews();
    Log.i( "GRAPH", "After Remove" );
    graphView = ChartFactory.getCubeLineChartView( getApplicationContext(), dataset, renderer, 0.3f);
    Log.i( "GRAPH",  "Before addView" );
    graphLayout.addView(graphView);
    Log.i( "GRAPH", "After addView" );
}

updateGraph()メソッドの最後に、3 つのLog呼び出しがすべて LogCat に表示されます。

4

1 に答える 1

1

問題は、ScrollView. ScrollViewレイアウトから を削除しただけで、チャートは正常に表示されました。

編集モードのwaves.xmlの警告に注意してScrollViewください:「このScrollViewレイアウトまたはそのLinearLayoutの親はおそらく役に立たない」.

于 2013-02-02T20:42:11.583 に答える