首页 > 代码库 > achartengine之饼图模拟动态数据
achartengine之饼图模拟动态数据
在achartengine是通过ChartFactory.getPieChartView(context, dataset, renderer)方法得到一个GraphicalView对象而这个对象就是饼图对象。。。当然也可以通过ChartFactory。getXXXChartView对象得到其它的表图。
GraphicalView mChartView = ChartFactory.getPieChartView(context, dataset, mRenderer);
当你想要得到饼图对象时,就可以从getPieChartView方法里的参数中看出。。。
context上下文对象,
dataset 是一个CategorySeries 可以理解为一个数据集
mRenderer是一个DefaultRenderer 渲染器 饼图的外观都是由它来设置
CategorySeries 数据集
这个东东直接new出来然后调用categorySerisry.add(string, datas[i]);
public double[] datas={412.0,542.0,486.0,900.1};
string代表的是每一项的名称
DefaultRenderer 可以直接new出来 然后设置Legend左下字体 ,title标题,饼图上的字体大小以及颜色,设置后既要设置每一个项的颜色。。可以理解为在饼图上每一块的颜色。
public int[] colors={Color.BLACK,Color.GREEN,Color.MAGENTA,Color.RED};
for(int color :colors)
{
SimpleSeriesRenderer s=new SimpleSeriesRenderer();
s.setColor(color);
renderer.addSeriesRenderer(s);
}
这样就完成了DefaultRenderer 对象的创建了
具体思路就是样了!!!!!!!!!!!!!!!!
其中具体的方法可以在以下例子中的注释加以了解。。。当然还可以通过其它方法。。。。
首先布局文件activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<LinearLayout
android:id="@+id/chartLinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="9"
></LinearLayout>
<Button
android:id="@+id/RefreshButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="refresh"
android:layout_weight="1"
></Button>
</LinearLayout>
MainActivity类
import org.achartengine.GraphicalView;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import com.myluocan.chart.pieChar;
public class MainActivity extends Activity {
private GraphicalView graphicalView;
private LinearLayout linearLayout;
private pieChar piechar;
private Button button;
public String []legendStr={
"差",
"不达标",
"达标",
"优秀"
};
public double[] datas={412.0,542.0,486.0,900.1};
public double[] datas1={410.0,100.0,201.5,80.2};
public int[] colors={Color.BLACK,Color.GREEN,Color.MAGENTA,Color.RED};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
linearLayout=(LinearLayout) findViewById(R.id.chartLinearLayout);
piechar=new pieChar(legendStr,colors,datas);
graphicalView = piechar.getChart(this, "");
linearLayout.addView(graphicalView);
}
public void init()
{
button=(Button) findViewById(R.id.RefreshButton);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
graphicalView=piechar.refresh(datas1);
}
});
}
}
peichar类
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.model.CategorySeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import android.content.Context;
import android.graphics.Color;
public class pieChar {
private String []legendStr;
private double sum;
private double[] datas;
private int[] colors;
private double[] lengends;
private Context context;
CategorySeries dataset;
DefaultRenderer renderer;
GraphicalView graphicalView;
private String[] getLegendStr() {
return legendStr;
}
public void setLegendStr(String[] legendStr) {
this.legendStr = legendStr;
}
public double getSum() {
return sum;
}
public double[] getDatas() {
return datas;
}
public void setDatas(double[] datas) {
this.datas = datas;
}
public int[] getColors() {
return colors;
}
public void setColors(int[] colors) {
this.colors = colors;
}
public double[] getLengends() {
return lengends;
}
public void setLengends(double[] lengends) {
this.lengends = lengends;
}
public pieChar(String[] legendStr,int []colors,double[] datas)
{
this.legendStr=legendStr;
this.colors=colors;
this.datas=datas;
}
public GraphicalView getChart(Context context,String seriesTitle)
{
this.context=context;
dataset=getDataset(seriesTitle,legendStr,datas);
renderer=getRendere(colors);
graphicalView= ChartFactory.getPieChartView(context, dataset, renderer);
return graphicalView;
}
//创建渲染器
protected DefaultRenderer getRendere(int [] colors)
{
DefaultRenderer renderer=new DefaultRenderer();
renderer.setLegendTextSize(30);//设置左下角表注的文字大小
//renderer.setShowLegend(false);//显示左下文字
renderer.setZoomButtonsVisible(true);//设置显示放大缩小按钮
renderer.setZoomEnabled(true);//设置不允许放大缩小.
renderer.setChartTitle("统计结果");//设置图表标题的文字大小
renderer.setChartTitleTextSize(30);//设置图表标题的文字大小
renderer.setLabelsColor(Color.BLUE);//饼图上标记文字的颜色
renderer.setLabelsTextSize(20);//设置饼图上标记文字的大小
//renderer.setStartAngle(45); //把表图旋转 45
renderer.setPanEnabled(true);//设置是否可以平移
renderer.setDisplayValues(true);//是否显示值
renderer.setClickEnabled(true);//设置是否可以被点击
renderer.setShowAxes(true);
renderer.setAxesColor(Color.CYAN);
renderer.setMargins(new int[]{10,30,15,0}) ;
for(int color :colors)
{
SimpleSeriesRenderer s=new SimpleSeriesRenderer();
s.setColor(color);
renderer.addSeriesRenderer(s);
}
return renderer;
}
//初始化数据
public boolean initData()
{
sum=0;
lengends=new double[datas.length];
for(int i=0;i<datas.length;i++)
{
sum+=datas[i];
}
//计算百分比
for(int i=0;i<datas.length;i++)
{
lengends[i]=(double)Math.round(datas[i]*10000/sum)/100;
}
return true;
}
protected CategorySeries getDataset(String title,String[] lengendStr,double []datas)
{
initData();
CategorySeries categorySerisry=new CategorySeries(title);
for(int i=0;i<lengendStr.length;i++)
{
categorySerisry.add(lengendStr[i]+lengends[i]+"%", datas[i]);
}
return categorySerisry;
}
//更新数据
public GraphicalView refresh(double[] datas1)
{
if(dataset!=null)
{
dataset.clear();
setDatas(datas1);
initData();
for(int i=0;i<legendStr.length;i++)
{
dataset.add(legendStr[i]+lengends[i]+"%", datas[i]);
}
graphicalView.repaint();
}
return graphicalView;
}
}
这个应该很好看懂 原本想分开解说的 但。。。时间好像有点。。。下班