如何在android中绘制饼图

我想在我的android应用程序中绘制一个饼图。 你能否build议我以一种简单的方式来做到这一点? 我已经为此写了一个视图类,但是并不令人满意。 所以,如果你告诉我一个好的和高性能的图表库,我将不胜感激。

Solutions Collecting From Web of "如何在android中绘制饼图"

从下载jar

http://www.achartengine.org/content/download.html

将jar添加到项目lib文件夹中。 还有一个样本也由开发者提供。 你可以检查并修改你想要的。

还有一个demo @

http://www.achartengine.org/content/demo.html

文档

http://www.achartengine.org/content/javadoc/org/achartengine/chart/PieChart.html

例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/chart" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="horizontal" > </LinearLayout> </LinearLayout> 

Activity类

 public class AChartEnginePieChartActivity extends Activity { private static int[] COLORS = new int[] { Color.GREEN, Color.BLUE,Color.MAGENTA, Color.CYAN }; private static double[] VALUES = new double[] { 10, 11, 12, 13 }; private static String[] NAME_LIST = new String[] { "A", "B", "C", "D" }; private CategorySeries mSeries = new CategorySeries(""); private DefaultRenderer mRenderer = new DefaultRenderer(); private GraphicalView mChartView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mRenderer.setApplyBackgroundColor(true); mRenderer.setBackgroundColor(Color.argb(100, 50, 50, 50)); mRenderer.setChartTitleTextSize(20); mRenderer.setLabelsTextSize(15); mRenderer.setLegendTextSize(15); mRenderer.setMargins(new int[] { 20, 30, 15, 0 }); mRenderer.setZoomButtonsVisible(true); mRenderer.setStartAngle(90); for (int i = 0; i < VALUES.length; i++) { mSeries.add(NAME_LIST[i] + " " + VALUES[i], VALUES[i]); SimpleSeriesRenderer renderer = new SimpleSeriesRenderer(); renderer.setColor(COLORS[(mSeries.getItemCount() - 1) % COLORS.length]); mRenderer.addSeriesRenderer(renderer); } if (mChartView != null) { mChartView.repaint(); } } @Override protected void onResume() { super.onResume(); if (mChartView == null) { LinearLayout layout = (LinearLayout) findViewById(R.id.chart); mChartView = ChartFactory.getPieChartView(this, mSeries, mRenderer); mRenderer.setClickEnabled(true); mRenderer.setSelectableBuffer(10); mChartView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); if (seriesSelection == null) { Toast.makeText(AChartEnginePieChartActivity.this,"No chart element was clicked",Toast.LENGTH_SHORT).show(); } else { Toast.makeText(AChartEnginePieChartActivity.this,"Chart element data point index "+ (seriesSelection.getPointIndex()+1) + " was clicked" + " point value="+ seriesSelection.getValue(), Toast.LENGTH_SHORT).show(); } } }); mChartView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); if (seriesSelection == null) { Toast.makeText(AChartEnginePieChartActivity.this,"No chart element was long pressed", Toast.LENGTH_SHORT); return false; } else { Toast.makeText(AChartEnginePieChartActivity.this,"Chart element data point index "+ seriesSelection.getPointIndex()+ " was long pressed",Toast.LENGTH_SHORT); return true; } } }); layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); } else { mChartView.repaint(); } } } 

或者,如果您不想使用第三方库,则可以使用此公式获取圆上的点,给定半径r

 x = r * Math.cos(2 * Math.PI) //This will give you r y = r * Math.sin(2 * Math.PI) //This will give you 0 

对于圆的其他点,您需要修改余弦参数,例如:

 x = r * Math.cos(2 * Math.PI / 6) //This will give you r/2 y = r * Math.sin(2 * Math.PI / 6) //This will give you r*sqrt(3/2) 

如果你想用固定的步骤填写整个圆圈n:

 for(int i=0;i<n;i++) { x = r * Math.cos(2 * Math.PI * i / n) y = r * Math.sin(2 * Math.PI * i / n) //Draw PointF(x,y) } 

另一个库是PAcPie Char,你可以看看:

https://github.com/marshallino16/PacPieChart-Android

我还在写,但至less,这是一个开始

我认为你最好的朋友是一个ChateEngine 。
它很容易使用,并提供了一个广泛的图表来显示。

饼图的例子:

在这里输入图像说明

如果你不想使用任何第三方库,请尝试谷歌样本表格。 他们提供了一个示例在自定义绘图文档中绘制饼图。

文档和示例代码可以在这里find

GraphView是Android的库,以编程方式创build灵活和漂亮的图。 很容易理解,集成和定制。

tellmehow.co

它支持graphicstypes:

  1. 线图
  2. 条形图
  3. 点图
  4. 或者实现你自己的自定义types。

添加gradle依赖项:

 compile 'com.jjoe64:graphview:4.2.1' 

添加视图到布局:

 <com.jjoe64.graphview.GraphView android:layout_width="match_parent" android:layout_height="200dip" android:id="@+id/graph" /> 

添加一些数据:

 GraphView graph = (GraphView) findViewById(R.id.graph); LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>(new DataPoint[] { new DataPoint(0, 1), new DataPoint(1, 5), new DataPoint(2, 3), new DataPoint(3, 2), new DataPoint(4, 6) }); graph.addSeries(series);