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. 一、Hadoop学习笔记————概述

    hadoop使用java编写,版本较为混乱,初学者可从1.2.1开始学习

  2. PHP防止SQL注入和XSS攻击

    PHP防止SQL注入和XSS攻击PHP防范SQL注入是一个非常重要的安全手段.一个优秀的PHP程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力.说到网站安全,就不得不提到SQL注入( ...

  3. JavaScript OOP(二):this关键字以及call、apply、bind

    JavaScript的this关键字非常灵活! this 返回的总是对象:即返回属性或方法"当前"所在的对象 var o1={ name:'apple', age:100, msg ...

  4. PHP扩展开发 第一课 为什么要写扩展及hello world

    PHP扩展开发其实很简单.那为什么要扩展开发呢. 这里咱们以实际的案例进行对比. 第一步,进入 php源码包   http://www.php20.com/forum.php?m ... =159&a ...

  5. COM组件转换为.NET元数据2

    上一篇通过命令的方式实现COM组件与.NET元素的转换.这次直接在VS中转换. 以下为步骤:

  6. 分享Sql Server 2008 r2 数据备份,同步服务器数据(一.本地备份)

    最近在部署一个系统,处于数据安全的考虑,因此对相应的数据库服务器定时备份,以及数据同步到备份服务上.之前在另外的一个项目中也做过相应的操作,但是操作都是按照查找到的文章一步一步的操作,碰到一些细节问题 ...

  7. json数据导出excel

    最近做的一个项目涉及到把数据导出到excel里面,网上找来找去,最终找到两种办法,废话不多说了 第一种: 拿到表格的id就可以抓取表格的数据,导出到excel,这种方式简单粗暴,引入这两个插件即可. ...

  8. Android 跨进程启动Activity黑屏(白屏)的三种解决方案

    原文链接:http://www.cnblogs.com/feidu/p/8057012.html 当Android跨进程启动Activity时,过程界面很黑屏(白屏)短暂时间(几百毫秒?).当然从桌面 ...

  9. python掉微信api

    # -*- coding:utf-8 -*-import requestsimport jsonimport sys# 企业号及应用相关信息corp_id = 'xxxx'corp_secret = ...

  10. MapReduce编程(一) Intellij Idea配置MapReduce编程环境

    介绍怎样在Intellij Idea中通过创建mavenproject配置MapReduce的编程环境. 一.软件环境 我使用的软件版本号例如以下: Intellij Idea 2017.1 Mave ...