Achartengine.jar绘制动态图形一 --饼图
时间:2022-05-06
本文章向大家介绍Achartengine.jar绘制动态图形一 --饼图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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);
(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;
}
}
完
- 温故而知新:设计模式之组合模式(Composite)
- ruby学习笔记(7)-闭包
- ruby学习笔记(6)-Array的使用
- centos7下部署iptables环境纪录(关闭默认的firewalle)
- ruby学习笔记(5)-模块module的运用
- linux系统root密码遗忘的情况下的解决办法
- ruby学习笔记(4)-动态修改类的属性
- 如果技术是一种生命
- ruby学习笔记(2)--类的基本使用
- 域名资讯:四声域名BHHS.com被BHHS公司收购
- ruby学习笔记(1)--初识语法
- 无法启用数据库中的 Service Broker,因为已存在启用的具有相同 ID 的 Service Broker。
- Centos7.2下针对LDAP的完整部署记录
- .NET Core 已经实现了PHP JIT,现在PHP是.NET上的一门开发语言
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- RaspberryPi接入HomeKit
- React Fetch请求
- React使用代理解决跨域问题
- React登录跳转遇到的问题
- 响应式架构与 RxJava 在有赞零售的实践
- Centos 7搭建Gitlab服务器超详细Centos 7搭建Gitlab服务器超详细(搭建成功)
- Netty之旅二:口口相传的高性能Netty到底是什么?
- 前端知识复习(一)
- Powershell运行脚本报错:此系统上禁止运行脚本
- git rebase解决合并冲突
- npm相关操作
- Angular html property的值如何被更新的
- Centos 7 使用mailx发送邮件
- Centos 7 备份MySQL
- Centos 7 备份MySQL/MongoDB并发邮件脚本