Android自定义View实现饼状图带动画效果
时间:2022-07-28
本文章向大家介绍Android自定义View实现饼状图带动画效果,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一个简单的自定义view饼状图,加入了动画效果
先看一下效果
下面就直接上代码了
public class Yidong2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new PointView(this));
}
public class PointView extends View {
private int[] p1 = {0, 100, 200}; //存放弧度的数组
//定义存放颜色的数组
private int[] p2 = {Color.GREEN, Color.YELLOW, Color.RED};
Paint paint = new Paint(); //画笔
private float k; //弧度变动后的值
//定义矩形,用户确定描绘的饼状图位置
private final RectF rectF = new RectF(100, 100, 800, 800);
//定义
public PointView(Context context) {
super(context);
paint.setStyle(Paint.Style.FILL); //设置画笔为填充
paint.setStrokeWidth(10f); //设置画笔宽度
paint.setAntiAlias(true); //抗锯齿
//属性动画
ValueAnimator animator = ValueAnimator.ofFloat(0, 360);
animator.setDuration(1000); //设置动画时间
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
k = (float) animation.getAnimatedValue(); //获取变动后的值
invalidate(); //刷新布局
}
});
animator.start(); //启动动画
}
@SuppressLint("DrawAllocation")
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//这里做了不同颜色的范围判断,还可以进行封装,为了便于学习,就没有再次封装
if (k < p1[1]) {
shezhi(canvas, 0);
} else if (k < p1[2]) {
shezhi(canvas, 1);
} else {
shezhi(canvas, 2);
}
}
//动画方法,Android的动画有三种,View动画,帧动画,属性动画,
//这里对动画方法进行简单的封装,只需要明白,如果存在多个颜色的话,在绘制第二个以后颜色时,每次都要先绘制先前所有颜色,再绘制当前颜色,即可理解,这也就是动画的基本逻辑。
private void shezhi(Canvas canvas, int n) {
for (int i = 0; i <= n; i++) {
paint.setColor(p2[i]);
canvas.drawArc(rectF, p1[i], k - p1[i], true, paint);
}
}
}
}
已经加入了详细的注释,同样的原理,还可以将动画加入到柱形图等等。
以上就是本文的全部内容,希望对大家的学习有所帮助。
- 监听器第一篇【基本概念、Servlet各个监听器】
- 监听器第二篇【统计网站人数、自定义session扫描器、踢人小案例】
- 通俗易懂的分析如何用Python实现一只小爬虫,爬取拉勾网的职位信息
- JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】
- 一条执行时间两天半的sql语句简化(r4笔记第62天)
- 05-01总结方法,数组(一维)
- 02 Java类的加载机制
- 权限管理系统
- 03 JVM的垃圾回收机制
- Tomcat就是这么简单
- Servlet第三篇【request和response介绍、response的常见应用】
- 通过java来格式化sql语句(r4笔记第61天)
- Servlet第四篇【request对象常用方法、应用】
- Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- SpringBoot系列之异步任务@Async使用教程
- 深入k8s:k8s部署&在k8s中运行第一个程序
- Java是如何实现Future模式的?万字详解!
- Tensorflow基础入门十大操作总结
- Django个人博客,三小时带你入门Django框架
- 微信公众号文章采集工具,可采集文章文字内容信息及图片
- Python打包GUI界面组件汇总,Tkinter(TK)实例代码
- 知了超细讲解Django打造大型企业官网学习记录,02diango url 笔记
- 直播卖货小程序源码中,商品分类页面是如何实现的
- python requests.session验证码登录应用实战,爱站关键词挖掘采集
- 【淘宝】python的淘宝秒杀抢购下单源码参考
- Python素材下载爬虫,ui素材下载爬取采集源码
- Python与seo的应用,sitemap.xml文件制作工具源码
- 关键词爬虫,Python花瓣画板关键词采集存储数据库
- 电商商品爬虫,亚马逊amazon采集源码