我正在尝试在卡片视图中创建一个饼图。使用 achartEngine-1.1 在上午创建一个饼图。我正在使用卡片视图bcz我想在列表视图中的图表数量。 我设计了一个XML文件名dashboard_graph_view,其中包含线性布局和文本视图,用于图表的标题。并创建了一个相对布局,我在其中放置饼图。但是当我运行代码饼图时没有创建。但是当尝试在同一个内部创建文本视图时它是可见的。我试图谷歌但没有找到任何有用的东西。 这是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>
提前致谢。
答案 0 :(得分:1)
它是否为标题下面的饼图留出空间,或者卡片中是否有标题并且没有空格?如果是这样,那么问题就是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));
对于这种情况,当你想要在列表中显示不同的东西时,更好的解决方案是创建一个&#34;视图类型&#34;你的清单的概念。您可以在适配器中执行此操作:
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方法接受现有视图,并允许您使用渲染器重建视图。如果没有,那么上面的简单解决方案应该可以正常工作。