PS:我们在做安卓程序的时候,免不了会做一些图形,自己可以选择自定义view ,就是用Canvas画,也可以用写好的jar包,就是achartengine.jar,使用jar包的好处就快速绘制图形,不用我们计算坐标等,计算坐标就会和数学结合,通过sin,cos等来计算,遇到3维那就更麻烦了,就像OpenGL一样,空间视角,三维制作,我的博客里也有一些,感兴趣的小火鸡可以看一下,

上效果图:

步骤:

1:首先找到jar包,导入achartengine.jar,放在项目的libs目录下即可,记得要添加一下呦。

下载地址:http://download.csdn.net/download/jjhahage/10114288

2:创建activity_main.xml文件,给view分配一个空间。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cn.liuzhitong.charttest1_1.MainActivity"> <LinearLayout
android:id="@+id/id_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> </LinearLayout>
</RelativeLayout>

创建MainActivity.java文件。这里先拿出重要代码,后面有总代码。

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题
setContentView(R.layout.activity_main);
LinearLayout ll= (LinearLayout) findViewById(R.id.id_layout);
//创建图表,首先要创建数据源和渲染器,然后让一个方法调用即可,
view = ChartFactory.getPieChartView(this,getData(),getRenderer());
ll.addView(view);

2-1:创建这个饼图方法就是getPieChartView(this,数据,渲染器);

数据getData()

 //创建饼图
public CategorySeries getData()
{ cs = new CategorySeries("第一个饼图"); cs.add("黄金",30);
cs.add("铂金",10);
cs.add("黑金",60); return cs;
}

渲染器getRenderer()

public DefaultRenderer getRenderer(){
//创建渲染器,描绘器对象
renderer = new DefaultRenderer(); ssr1 = new SimpleSeriesRenderer();
ssr2 = new SimpleSeriesRenderer();
ssr3 = new SimpleSeriesRenderer();
ssr1.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
ssr2.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
ssr3.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
ssr1.setColor(Color.YELLOW);
ssr2.setColor(Color.CYAN);
ssr3.setColor(Color.BLACK);
renderer.addSeriesRenderer(ssr1);
renderer.addSeriesRenderer(ssr2);
renderer.addSeriesRenderer(ssr3); renderer.setChartTitle("第一个饼图");
renderer.setShowLabels(true);//设置显示标签
renderer.setShowLegend(true);//显示底部说明标签
renderer.setLabelsTextSize(20);//设置标签字体大小,
renderer.setAntialiasing(true);//消失锯齿
renderer.setApplyBackgroundColor(true);//想要添加背景要先申请
renderer.setBackgroundColor(Color.DKGRAY);
renderer.setChartTitleTextSize(30);
renderer.setDisplayValues(true); //显示数据,这个不写就不会显示出百分比。。
renderer.setZoomButtonsVisible(true); //显示缩小放大图标 return renderer;
}

3:创建定时器,定时每秒重画一次


 Timer time=new Timer();

        handler = new Handler() {// 这里的Handler实例将配合下面的Timer实例,完成定时更新图表的功能
public void handleMessage(Message msg) {
if (msg.what == 1) {
init();// 刷新图表具体方法 Handler将此并入主线程
}
// super.handleMessage(msg);
}
};
TimerTask task = new TimerTask() {
public void run() {// 通过消息更新
Log.i("task", " task ok ");
Message message = new Message();
message.what = 1;// 消息定义标志
handler.sendMessage(message);
}
}; time.schedule(task,1,1000);// 执行任务, 一秒一次

注释的代码,可以写也可以不写,写了也不会出错。

 //模拟动态赋值,
    public void init()
{ cs.clear();//清空之前的数据 Random random = new Random();
int R1 = random.nextInt(100);
int R2 = random.nextInt(100);
int R3 = random.nextInt(100);
// 设置种类名称和对应的数值,前面是(key,value)键值对
cs.add("黄金",R1);
cs.add("铂金",R2);
cs.add("黑金",R3);
// renderer = new DefaultRenderer();
// ssr1.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
// ssr2.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
// ssr3.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
// ssr1.setColor(Color.BLACK);
// ssr2.setColor(Color.YELLOW);
// ssr3.setColor(Color.CYAN);
// renderer.addSeriesRenderer(ssr1);
// renderer.addSeriesRenderer(ssr2);
// renderer.addSeriesRenderer(ssr3); //让底部说明标签显示,如果不行,那就只会在初始化的时候显示一次
renderer.setShowLabels(true);//设置显示标签
renderer.setShowLegend(true);//显示底部说明标签
renderer.setLabelsTextSize(20);//设置标签字体大小,
renderer.setAntialiasing(true);//消失锯齿
renderer.setApplyBackgroundColor(true);//想要添加背景要先申请
renderer.setBackgroundColor(Color.DKGRAY);
view.repaint();//重画,不写就不会显示动态变化 }

4:总代码

package cn.liuzhitong.charttest1_1;

import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Window;
import android.widget.LinearLayout; import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.model.CategorySeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer; import java.text.NumberFormat;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask; public class MainActivity extends AppCompatActivity { private GraphicalView view;
private CategorySeries cs; public Handler handler;
private DefaultRenderer renderer;
private SimpleSeriesRenderer ssr1;
private SimpleSeriesRenderer ssr2;
private SimpleSeriesRenderer ssr3; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题
setContentView(R.layout.activity_main);
LinearLayout ll= (LinearLayout) findViewById(R.id.id_layout);
//创建图表,首先要创建数据源和渲染器,然后让一个方法调用即可,
view = ChartFactory.getPieChartView(this,getData(),getRenderer());
ll.addView(view); Timer time=new Timer(); handler = new Handler() {// 这里的Handler实例将配合下面的Timer实例,完成定时更新图表的功能
public void handleMessage(Message msg) {
if (msg.what == 1) {
init();// 刷新图表具体方法 Handler将此并入主线程
}
// super.handleMessage(msg);
}
};
TimerTask task = new TimerTask() {
public void run() {// 通过消息更新
Log.i("task", " task ok ");
Message message = new Message();
message.what = 1;// 消息定义标志
handler.sendMessage(message);
}
}; time.schedule(task,1,1000);// 执行任务, 一秒一次 } //模拟动态赋值,
public void init()
{ cs.clear();//清空之前的数据 Random random = new Random();
int R1 = random.nextInt(100);
int R2 = random.nextInt(100);
int R3 = random.nextInt(100);
// 设置种类名称和对应的数值,前面是(key,value)键值对
cs.add("黄金",R1);
cs.add("铂金",R2);
cs.add("黑金",R3);
// renderer = new DefaultRenderer();
// ssr1.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
// ssr2.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
// ssr3.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
// ssr1.setColor(Color.BLACK);
// ssr2.setColor(Color.YELLOW);
// ssr3.setColor(Color.CYAN);
// renderer.addSeriesRenderer(ssr1);
// renderer.addSeriesRenderer(ssr2);
// renderer.addSeriesRenderer(ssr3); //让底部说明标签显示,如果不行,那就只会在初始化的时候显示一次
renderer.setShowLabels(true);//设置显示标签
renderer.setShowLegend(true);//显示底部说明标签
renderer.setLabelsTextSize(20);//设置标签字体大小,
renderer.setAntialiasing(true);//消失锯齿
renderer.setApplyBackgroundColor(true);//想要添加背景要先申请
renderer.setBackgroundColor(Color.DKGRAY);
view.repaint();//重画,不写就不会显示动态变化 } //创建饼图
public CategorySeries getData()
{ cs = new CategorySeries("第一个饼图"); cs.add("黄金",30);
cs.add("铂金",10);
cs.add("黑金",60); return cs;
}
//创建渲染器
public DefaultRenderer getRenderer(){
//创建渲染器,描绘器对象
renderer = new DefaultRenderer(); ssr1 = new SimpleSeriesRenderer();
ssr2 = new SimpleSeriesRenderer();
ssr3 = new SimpleSeriesRenderer();
ssr1.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
ssr2.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
ssr3.setChartValuesFormat(NumberFormat.getPercentInstance());// 设置百分比
ssr1.setColor(Color.YELLOW);
ssr2.setColor(Color.CYAN);
ssr3.setColor(Color.BLACK);
renderer.addSeriesRenderer(ssr1);
renderer.addSeriesRenderer(ssr2);
renderer.addSeriesRenderer(ssr3); renderer.setChartTitle("第一个饼图");
renderer.setShowLabels(true);//设置显示标签
renderer.setShowLegend(true);//显示底部说明标签
renderer.setLabelsTextSize(20);//设置标签字体大小,
renderer.setAntialiasing(true);//消失锯齿
renderer.setApplyBackgroundColor(true);//想要添加背景要先申请
renderer.setBackgroundColor(Color.DKGRAY);
renderer.setChartTitleTextSize(30);
renderer.setDisplayValues(true); //显示数据,这个不写就不会显示出百分比。。
renderer.setZoomButtonsVisible(true); //显示缩小放大图标 return renderer;
} }

Achartengine.jar绘制动态图形一 --饼图的更多相关文章

  1. Achartengine.jar绘制动态图形-饼图

    Achartengine.jar绘制动态图形一 --饼图 PS:我们在做安卓程序的时候,免不了会做一些图形,自己可以选择自定义view ,就是用Canvas画,也可以用写好的jar包,就是achart ...

  2. 用Python绘制一套“会跳舞”的动态图形给你看看

    在读技术博客的过程中,我们会发现那些能够把知识.成果讲透的博主很多都会做动态图表.他们的图是怎么做的?难度大吗?这篇文章就介绍了 Python 中一种简单的动态图表制作方法. 看这优美的舞姿 很多人学 ...

  3. css绘制特殊图形,meida查询,display inline-box间隙问题以及calc()函数

    本文同时发表于本人个人网站 www.yaoxiaowen.com 距离上一篇文章已经一个月了,相比于写代码,发现写文章的确是更需要坚持的事情.言归正传,梳理一下这一个月来,在写ife任务时,有必要记录 ...

  4. matlab绘制三维图形

    原文地址:种三维曲面图. 程序如下: [x,y]=meshgrid(-8:0.5:8); z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2, ...

  5. 绘制基本图形和线型(StrokeStyle)的设置详解

    绘制基本图形和线型(StrokeStyle)的设置详解 目前,在博客园上,相对写得比较好的两个关于Direct2D的教程系列,分别是万一的Direct2D系列和zdd的Direct2D系列.有兴趣的网 ...

  6. css绘制特殊图形,meida查询,display inline-box间隙问题以及calc()函数

    本文同时发表于本人个人网站 www.yaoxiaowen.com 距离上一篇文章已经一个月了,相比于写代码,发现写文章的确是更需要坚持的事情.言归正传,梳理一下这一个月来,在写ife任务时,有必要记录 ...

  7. Direct2D教程II——绘制基本图形和线型(StrokeStyle)的设置详解

    目前,在博客园上,相对写得比较好的两个关于Direct2D的教程系列,分别是万一的Direct2D系列和zdd的Direct2D系列.有兴趣的网友可以去看看.本系列也是介绍Direct2D的教程,是基 ...

  8. 10 个超炫绘制图表图形的 Javascript 插件【转载+整理】

    原文地址 现在,有很多在线绘制图表和图形(Charts and Graphs)的 JavaScript 插件,这些插件还都是免费,以及图表库.这些插件大量出现的原因是基于一个事实:人们不再依赖于 Fl ...

  9. 学习笔记:HTML5 Canvas绘制简单图形

    HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...

随机推荐

  1. A:分段函数-poj

    A:分段函数 总时间限制:  1000ms 内存限制:  65536kB 描述 编写程序,计算下列分段函数y=f(x)的值. y=-x+2.5; 0 <= x < 5 y=2-1.5(x- ...

  2. 深度解析continue,break和return

    continue,break和return是Java中的关键字,在方法体内的流程控制中使用频率较高. 在现实中,经常会有同学在使用中产生混淆,从而使得流程控制语句发生混乱.在这里,我结合个人的使用经历 ...

  3. 【面试问题】——秋招面试中遇到的一些问题&思维导图&反思

    前言:秋招也跑了挺多的公司,虽然都是招Web前端,但是不同的公司,因为需求和目的不同,面试的考察点也是各不相同.我没有实习经验,只有自己学东学西比较杂也比较浅的一些知识积累可以用,这个过程我发现了自己 ...

  4. 自定义spring mvc的json视图

    场景 前端(安卓,Ios,web前端)和后端进行了数据的格式规范的讨论,确定了json的数据格式: { "code":"200", "data&quo ...

  5. 【POJ2823】Sliding Window

    http://poj.org/problem?id=2823 题意:你有一个长度n的序列,分别询问[1,k],[2,k+1],[3,k+2],...,[n-k+1,n]这n-k+1个区间的最大值和最小 ...

  6. springBoot actuator监控配置及使用

    准备环境: 一个springBoot工程 第一步:添加以下依赖 <dependency> <groupId>org.springframework.boot</group ...

  7. 响应式框架Bootstrap栅格系统

    <!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8&qu ...

  8. 几条jQuery代码片段助力Web开发效率提升

    平滑滚动至页面顶部 以下是jQuery最为常见的一种实现效果:点击一条链接以平滑滚动至页面顶部.虽然没什么新鲜感可言,但每位开发者几乎都用得上. $("a[href='#top']" ...

  9. Android查缺补漏--BroadcastReceiver的类型与使用

    Broadcast 是一种被用于应用内和应用之间传递信息的机制.一个广播可以对应多个接受者.一个完整的广播机制,需要具有以下三个要素: 发送广播的Broadcast 接受广播的BroadcastRec ...

  10. 基于Metronic的Bootstrap开发框架经验总结(17)-- 使用 summernote插件实现HTML文档的编辑和图片插入操作

    在很多场合,我们需要在线编辑HTML内容,然后在页面上或者其他终端上(如小程序.APP应用等)显示,编辑HTML内容的插件有很多,本篇介绍基于Bootstrap的 summernote插件实现HTML ...