关于安卓自定义进度条(二)

简介: 关于安卓自定义进度条(二)

先上gif效果图:

效果图

上图中,蓝色的进度条为自定义进度条

注意!!!源码在文末

背景

要实现一个进度条,大部分情况下,都是需要进行自定义的。因为原生就算你自定义了背景图片,但是一旦进度条的高度,超过了一定的范围,且进度在1%左右的时候,就会看到明显的“卡边”情况。
就是进度条如果是圆角的背景,但是如果是小进度的时候,进度会显示出一个长方形。因此为了一了百了,则有了这篇文章,自定义进度条!




思路

要实现自定义进度条,首先,是需要有canvas的基础知识的。如果没有,则需要自行学习。
伸手党看到这里,可以关闭网页了。

首先,如开头的图片所示,进度条,有以下要素:

(1)区分为当前进度颜色,和背景进度颜色

(2)有圆角

(3)点击后,有扩散的水波纹效果,然后从百分之一百回到当前进度




大概要点就是这些。下面开始定义要素。

(1)有一个状态变量,是控制进度条的状态的,例如说默认状态,选中状态,非选中状态

(2)控制颜色的变量

(3)进度条的值

(4)点击时候的参数




再者,我们需要思考一下问题:

(1)默认情况,是没有进度的,所以只需要绘制一个默认的背景即可

(2)非选中状态,进度条是从0开始到目标值的,中间有个过渡的动画

(3)选中状态,先触发水波纹动画,当动画到达最长边的时候,则会有消失,然后播放进度条动画

实现

(1)水波纹
直接使用canvas中的drawCircle方法绘制即可,通过ValueAnimator进行半径的变化,然后即可实现

(2)普通从0-xx的进度条动画,也是通过ValueAnimator进行控制即可

(3)基于(2)的基础上,如果进度条从100-xx也是通过ValueAnimator变化即可。

整体绘制实现,都需要放到onDraw方法中,通过标识(Boolean)的控制,控制绘制的方法,绘制不同的效果,onDraw核心代码如下:

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (!hadInit()) {
            return;
        }
        if (getStatus() == TYPE_STATUS_DEFAULT) {
            drawBgInfo(canvas);
            return;
        }
        if (!needDraw()) {
            return;
        }
        if (!needAnim()) {
            drawChangeBg(canvas);
            //不需要动画,直接画进度条
            drawProgressInfo(canvas);
            return;
        }
        //绘制顺序:
        //非选中模式,进度条慢慢叠加,直到进度值
        //选中模式,水波纹填充后,进度条渐渐显示,数值从100退回到目标值
        if (mDrawingRipple) {
            //绘制水波纹
            drawRippleInfo(canvas);
        }
        if (mDrawingCustomBg) {
            //绘制修改后的背景
            drawChangeBg(canvas);
        }
        if (mDrawingProgress) {
            //绘制进度条
            drawProgressInfo(canvas);
        }
    }

注意

(1)对于动画的实现,用到了ValueAnimator,注意释放的时机

(2)对于recyclerview中使用该进度条控件,请注意复用问题

(3)对于进度条的值换算,通过实际px值换算即可

(4)对于圆角,在绘制的过程中,你会发现低进度的情况(1%)圆角失效,
同时,网上大部分自定义进度条也是的,这里就不一一放出他们的博客地址了。实现方法有很多,我这里是直接使用clipPath后再绘制。

就这么多,链接在下面

that's all----------------------------------------------------

类名:

SelectionProgressHorizontalBarView

SelectionProgressVerticalBarView

代码地址

目录
相关文章
|
2月前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
47 2
基于Android P,自定义Android开机动画的方法
|
2月前
|
供应链 物联网 区块链
未来触手可及:探索新兴技术的趋势与应用安卓开发中的自定义视图:从基础到进阶
【8月更文挑战第30天】随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实正在重塑我们的世界。本文将深入探讨这些技术的发展趋势和应用场景,带你领略未来的可能性。
|
2月前
|
测试技术 Android开发 Python
探索软件测试的艺术:从基础到高级安卓应用开发中的自定义视图
【8月更文挑战第29天】在软件开发的世界中,测试是不可或缺的一环。它如同艺术一般,需要精细的技巧和深厚的知识。本文旨在通过浅显易懂的语言,引领读者从软件测试的基础出发,逐步深入到更复杂的测试策略和工具的使用,最终达到能够独立进行高效测试的水平。我们将一起探索如何通过不同的测试方法来确保软件的质量和性能,就像艺术家通过不同的色彩和笔触来完成一幅画作一样。
|
15天前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
40 10
|
20天前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
30 3
|
21天前
|
前端开发 Android开发 开发者
安卓应用开发中的自定义视图基础
【9月更文挑战第13天】在安卓开发的广阔天地中,自定义视图是一块神奇的画布,它允许开发者将想象力转化为用户界面的创新元素。本文将带你一探究竟,了解如何从零开始构建自定义视图,包括绘图基础、触摸事件处理,以及性能优化的实用技巧。无论你是想提升应用的视觉吸引力,还是追求更流畅的交互体验,这里都有你需要的金钥匙。
|
24天前
|
缓存 搜索推荐 Android开发
安卓应用开发中的自定义View组件实践
【9月更文挑战第10天】在安卓开发领域,自定义View是提升用户体验和实现界面个性化的重要手段。本文将通过一个实际案例,展示如何在安卓项目中创建和使用自定义View组件,包括设计思路、实现步骤以及可能遇到的问题和解决方案。文章不仅提供了代码示例,还深入探讨了自定义View的性能优化技巧,旨在帮助开发者更好地掌握这一技能。
|
2月前
|
XML 搜索推荐 Android开发
安卓开发中的自定义View组件实践
【8月更文挑战第30天】探索Android世界,自定义View是提升应用界面的关键。本文以简洁的语言带你了解如何创建自定义View,从基础到高级技巧,一步步打造个性化的UI组件。
|
2月前
|
Android开发
Android在rootdir根目录创建自定义目录和挂载点的方法
本文介绍了在Android高通平台的根目录下创建自定义目录和挂载点的方法,通过修改Android.mk文件并使用`LOCAL_POST_INSTALL_CMD`变量在编译过程中添加目录,最终在ramdisk.img的系统根路径下成功创建了`/factory/bin`目录。
85 1
|
28天前
|
前端开发 搜索推荐 Android开发
探索安卓开发中的自定义视图##
【9月更文挑战第6天】 在安卓应用开发的世界里,自定义视图如同绘画艺术中的色彩,它们为界面设计增添了无限可能。通过掌握自定义视图的绘制技巧,开发者能够创造出既符合品牌形象又提升用户体验的独特界面元素。本文将深入浅出地介绍如何从零开始构建一个自定义视图,包括基础框架搭建、关键绘图方法实现、事件处理机制以及性能优化策略。准备好让你的安卓应用与众不同了吗?让我们开始吧! ##
下一篇
无影云桌面