Android自定义View,制作饼状图带动画效果

简介: 一个简单的自定义view饼状图,加入了动画效果

一个简单的自定义view饼状图,加入了动画效果


先看一下效果

20181209154700731.gif

下面就直接上代码了

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);
            }
        }
    }
}

已经加入了详细的注释,同样的原理,还可以将动画加入到柱形图等等。

目录
相关文章
|
24天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
51 1
|
3天前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
21 1
|
3天前
|
Shell Android开发 开发者
Android系统 自定义动态修改init.custom.rc
Android系统 自定义动态修改init.custom.rc
22 0
|
3天前
|
存储 安全 Android开发
Android系统 自定义系统和应用权限
Android系统 自定义系统和应用权限
18 0
|
28天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
传感器 Android开发
android开发--翻转闹铃(从制作到打包)
                   (转载请声明,文章原作地址http://blog.csdn.net/buptgshengod)  最近在家放假,一直想做一个手机应用,于是就自己动手做起来了。想到一个注意就是当闹铃响的时候翻转闹铃,声音停止。                 首先是闹铃部分,网上有很多demon可以参考,大致就是广播的接收与取消,在我上传的代码文件中有着详细的记录。
701 0
|
5天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
27天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1
|
2天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。