簡體   English   中英

卡視圖內的餅圖在Android中不可見

[英]Pie Chart inside a card view not visible in android

我正在嘗試在卡片視圖內創建一個餅圖。 使用achartEngine-1.1在am中創建餅圖。 我正在使用名片視圖,我想在列表視圖中顯示圖表數量。 我設計了一個XML文件名dashboard_graph_view,它具有線性布局和用於文本標題的文本視圖。 並創建了一個相對布局,在其中放置了餅圖。但是當我運行代碼時,並未創建餅圖。 但是當嘗試在其中創建文本視圖時,它是可見的。我嘗試使用google進行搜索,但沒有發現任何有用的東西。 這是getview的代碼。

public View getView(int arg0, View v, ViewGroup arg2) {
    // TODO Auto-generated method stub
    if(v==null)
        v = inflater.inflate(R.layout.dashboard_graph_view, null);

    TextView txt1 = (TextView) v.findViewById(R.id.tittle);
    txt1.setText(port_list.get(arg0).get("portlet_title"));
    // Pie Chart Section Names
    String[] code = new String[] {
            "Eclair & Older", "Froyo", "Gingerbread", "Honeycomb",
            "IceCream Sandwich", "Jelly Bean"
    };

    // Pie Chart Section Value
    double[] distribution = { 3.9, 12.9, 55.8, 1.9, 23.7, 1.8 } ;

    // Color of each Pie Chart Sections
    int[] colors = { Color.BLUE, Color.MAGENTA, Color.GREEN, Color.CYAN, Color.RED,
            Color.YELLOW };

    // Instantiating CategorySeries to plot Pie Chart
    CategorySeries distributionSeries = new CategorySeries(" Android version distribution as on October 1, 2012");
    for(int i=0 ;i < distribution.length;i++){
        // Adding a slice with its values and name to the Pie Chart
        distributionSeries.add(code[i], distribution[i]);
    }

    // Instantiating a renderer for the Pie Chart
    DefaultRenderer defaultRenderer  = new DefaultRenderer();
    for(int i = 0 ;i<distribution.length;i++){
        SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer();
        seriesRenderer.setColor(colors[i]);
        seriesRenderer.setDisplayChartValues(true);
        // Adding a renderer for a slice
        defaultRenderer.addSeriesRenderer(seriesRenderer);
    }

    defaultRenderer.setChartTitle("Android version distribution as on October 1, 2012 ");
    defaultRenderer.setChartTitleTextSize(20);
    defaultRenderer.setZoomButtonsVisible(true);
    GraphicalView graph_view = ChartFactory.getPieChartView(app.getApplicationContext(), distributionSeries, defaultRenderer);
    // Creating an intent to plot bar chart using dataset and multipleRenderer
    //        Bundle intent = ChartFactory.getPieChartIntent(app.getBaseContext(), distributionSeries , defaultRenderer, "AChartEnginePieChartDemo");
    RelativeLayout l1 = (RelativeLayout) v.findViewById(R.id.graph_view);

    l1.addView(graph_view,new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    // Start Activity

    graph_view.repaint();
    l1.refreshDrawableState();

    return v;
}

這是xml文件。

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/feed_bg"
android:layout_marginBottom="-9dp"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginLeft="@dimen/feed_item_margin"
    android:layout_marginRight="@dimen/feed_item_margin"
    android:layout_marginTop="@dimen/feed_item_margin"
    android:background="@drawable/bg_parent_rounded_corner"
    android:orientation="vertical"
    android:paddingBottom="@dimen/feed_item_padding_top_bottom"
    android:paddingTop="@dimen/feed_item_padding_top_bottom" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="@dimen/feed_item_padding_left_right"
        android:paddingRight="@dimen/feed_item_padding_left_right" >

        <TextView
            android:id="@+id/tittle"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textColor="#FF000000"
            android:textSize="@dimen/feed_item_profile_name"
            android:textStyle="bold" />
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/graph_view"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.91"
        android:orientation="horizontal"
        android:paddingLeft="@dimen/feed_item_padding_left_right"
        android:paddingRight="@dimen/feed_item_padding_left_right" >
    </RelativeLayout>
  </LinearLayout>

  </LinearLayout>

提前致謝。

是在標題下方為餅圖留出空間,還是卡中僅包含標題而沒有空間? 如果是這樣,那么問題就出在Android上,認為graph_view不需要任何垂直空間,因此不會留下任何垂直空間。 我知道您在視圖層次結構中使用了match_parent,但是ListView仍然可以計算出其列表項真正需要多少垂直空間,並為其提供足夠的空間。

您是否有可能為列表中的餅圖使用固定高度? 當然要蘸一下。

編輯

回答評論中的問題:上下滾動列表時,ListView反復調用getView。 當前,您每次都調用addView,這意味着您每次都添加一個新圖表。 一個簡單的解決方案是每次刪除前一個圖表:

RelativeLayout l1 = (RelativeLayout) v.findViewById(R.id.graph_view);
if (l1.getChildCount() > 0) {
    l1.removeAllViews();
}
l1.addView(graph_view,new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

當您要在列表中顯示不同的內容時,對這種情況更好的解決方案是為列表創建“視圖類型”概念。 您將從在適配器中執行以下操作開始:

private static final int TYPE_PIE = 0;
private static final int TYPE_BAR = 1;

@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public int getItemViewType(int position) {
    MyPortClass port = port_list.get(position);
    if (port.shouldShowPie()) {
        return TYPE_PIE;
    } else {
        return TYPE_BAR;
    }
}

接下來,您應該創建XML文件的兩個版本,一個版本的布局中已經有一個餅圖,一個版本的條形圖。 然后在您的getView方法中:

public View getView(int position, View v, ViewGroup arg2) {
    MyPortClass port = port_list.get(position);

    if (v == null) {
        if (getViewType(position) == TYPE_PIE) {
            v = inflater.inflate(R.layout.dashboard_pie_view, null);
        } else {
            v = inflater.inflate(R.layout.dashboard_bar_view, null);
        }
    }
    ...

這是一個更好的解決方案,但是如果ChartFactory不支持配置現有的圖表視圖,則可能無法使用它。 當前,您僅顯示ChartFactory.getPieChartView,但也許有一個ChartFactory方法采用現有視圖,並允許您使用渲染器重建視圖。 如果沒有,那么上面的簡單解決方案應該可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM