2013-01-31 108 views
3

我一直在使用AChartEngine幾個星期,截至上週,一切正常。我真的找不到我已經改變的東西,但是現在這張圖並沒有出現在我的屏幕上。我的Activity使用圖的空佈局屬性進行初始化。在某個點上,用戶讀入輸入,然後更新圖形。AChartEngine圖形不會顯示?

這裏是我的圖形的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代碼中將圖表設置爲該視圖時,根本沒有任何cahnges。所有的複選框都會更新,並且正確添加一個新的微調框。

enter image description here

下面是從我的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()方法三個Log電話都顯示在我的logcat結束。

回答

1

問題是ScrollView。我只從佈局中刪除了ScrollView,圖表顯示正常。

請注意編輯模式下waves.xml中ScrollView的警告:「此ScrollView佈局或其LinearLayout父項可能無效」。

+0

有沒有更多的解釋爲什麼它不工作?我知道ScrollLayout沒有任何意義,因爲它什麼都不做,但是這是如何防止圖表在其子內顯示的呢? – JuiCe

+0

我還沒有使用ScrollView,但是佈局,高度=「wrap_content」的ScrollView和圖表之間的組合聽起來並不像最好的。 –