Android的ProgressBar自定义入门

Android 自定义ProgressBar横向圆角 ProgressBar大家可能项目中都会用到,但是大部分都是根据UI给的符合项目主题的自定义形式的; 下面就是我们项目中一个显示学习进度的横向ProgressBar; 可以看到四个角都是圆角的,本人首先想到的是自定义,但是会发现四个角总是不能够实现,要不左侧会被切成直角,要不进度内侧会被切成直角,也是从网上查找分析,最终实现如下: 结合网上大神的示意,在此作个笔记,方便之后遇到直接拿来用,节省时间. 借鉴ProgressBar 进度条的进度两端是圆角的方法 但是根据自定义的shape 或者是 阅读详情

Android ProgressBar

本文主要围绕android.widget.ProgressBar,对样式自定义的部分细节进行描述。


XML属性

首先,来了解一下ProgressBar到底在xml配置中到底有何属性,大家可以看看Android官网对ProgressBar的介绍

http://developer.android.com/reference/android/widget/ProgressBar.html。

看完后呢,下面将有一个表格将对部分重要的XML属性进行重新解读。

属性名                                           取值                        描述
style                                                       样式。通过简单的设置样式,我们可以更改ProgressBar的表现形式。
style = @android:style/Widget.ProgressBar                         菊花旋转
style = @android:style/Widget.ProgressBar.Horizontal      水平进度条模式
android:animationResolution   无任何作用
android:indeterminate true| false 启用indeterminate(中文:不定的,不明确)模式。设置为true。将导致启用进度条的动画。
android:indeterminateBehavior "repeat"|"cycle" indeterminate模式下,当进度条达到最大值时的动画处理行为:
"repeat"  = Animation.RESTART,动画将从头开始执行。
"cycle"     = Animation.REVERSE,动画将反向从头开始执行。
android:indeterminateDrawable   indeterminate模式下使用的Drawable对象。该对象如果是动画对象(继承自Animatable),
将会在onDraw方法中被启动动画。
android:indeterminateDuration   indeterminate模式动画间隔。
android:indeterminateOnly   强制indeterminate模式
android:maxHeight|android:minHeight   官方错误的解释说是ProgressBar的最大高度。经过测试,该属性用于控制“progressDrawable”对象的高度。
android:maxWidth|android:minWidth   官方错误的解释说是ProgressBar的最大宽度。经过测试,该属性用于控制“progressDrawable”对象的宽度。
android:progressDrawable   进度模式时使用的Drawable

从表格中不难看出,ProgressBar似乎存在两个工作模式“indeterminate”与"process"。

"indeterminate"中文意思为"不明确";意在进度无法确定时,使用动画的方式来表示进度,就像一个菊花一样,你能看到它正在努力旋转却无法知道它的进度。

"process"中文意思为“进度“;就是跟”indeterminate“的表现是相反的,我们可以看到实际的进度。


如何自定义样式?

默认样式(菊花)

用过ProgressBar的人都知道,默认的ProgressBar是一个非常努力勤奋的”小菊花“。当你面对这个”小菊花“,修改“indeterminate”属性时,你会发现勤奋的小菊花并没有一点改变。这其实是因为ProgressBar在系统中有默认样式(style=@android:style/Widget.ProgressBar)的原因。(这里可能会有朋友不理解默认样式的意思。

那么这位朋友可能需要了解一下Android的主题(Theme)相关的一些知识,这些可能需要花点时间)。

通过查看Android SDK的目录下的默认资源文件(android-sdk-windows\platforms\android-16\data\res\values\styles.xml),查看Widget.ProgressBar样式的定义。

<style name="Widget.ProgressBar">
    <item name="android:indeterminateOnly">true</item>
    <item name="android:indeterminateDrawable">@android:drawable/progress_medium_white</item>    <!-- 菊花图片 -->
    <item name="android:indeterminateBehavior">repeat</item>
    <item name="android:indeterminateDuration">3500</item>
    <item name="android:minWidth">48dip</item>
    <item name="android:maxWidth">48dip</item>
    <item name="android:minHeight">48dip</item>
    <item name="android:maxHeight">48dip</item>
</style>

如Xml文件描述,默认的ProgressBar的android:indeterminateOnly为true,也就是强制“indeterminate”模式的。Android几乎所有view与widget都会有默认样式,这些默认样式在你没有重新定义“style”属性时,会将这些默认样式应用到你的UI控件。假设你的ProgressBar定义如下:

<ProgressBar
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
实际的解释运行中,假设默认的ProgressBar样式为以上的Widget.ProgressBar,那么你的ProgressBar定义将如下:

<ProgressBar
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:indeterminateBehavior="repeat"
        android:indeterminateDrawable="@android:drawable/progress_medium_white"
        android:indeterminateDuration="3500"
        android:indeterminateOnly="true"
        android:maxHeight="48dip"
        android:maxWidth="48dip"
        android:minHeight="48dip"
        android:minWidth="48dip" 
	......
	..........当然这里还有很多view内置的默认属性定义。
/>


水平进度样式

设置style

要想ProgressBar显示水平进度很简单,只需要进行style的重新指定。

<ProgressBar
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

其中Widget.ProgressBar.Horizontal该套水平样式,是Android内置的。

同样的,我们可以在Android SDK的目录下,找到它的具体定义如下。

<style name="Widget.ProgressBar.Horizontal">
    <item name="android:indeterminateOnly">false</item>
    <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
    <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
    <item name="android:minHeight">20dip</item>
    <item name="android:maxHeight">20dip</item>
 </style>
自定义progressDrawable
水平ProgressBar在界面上有三个部分组成,分别是”background“,”progress“和"secondaryProgress"。通过查看默认样式的progressDrawable,即@android:drawable/progress_horizontal;我们可以比较清晰看到这三个部分的定义,并从中了解一些ProgressBar的实现原理。

首先,progressDrawable必须是一个layer-list,对应到代码类是一个LayerDrawable。Layer是图层意思,图层是一层一层往上叠加的。这样ProgressBar的"secondaryProgress"才能显示在”背景之上“,以此类推~~。

其次,"secondaryProgress"与”progress“在这里都是clip(注意:这并不是说一定要是clip,ProgressBar已经代码中做了非clip到clip的转换),对应到代码类是ClipDrawable。ClipDrawable通过setLevel的level级别,来控制图形的显示区域。很多的进度加载显示效果都是用ClipDrawable实现的,这里不进行详细描述,有兴趣的大家可以去百度一下。

重点:通过模仿以下的ProgressBar定义,我们自定义出自己的drawable对象,重新指定progressBar的style属性即可。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />

            <gradient
                android:angle="270"
                android:centerColor="#ff5a5d5a"
                android:centerY="0.75"
                android:endColor="#ff747674"
                android:startColor="#ff9d9e9d" />
        </shape>
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />

                <gradient
                    android:angle="270"
                    android:centerColor="#80ffb600"
                    android:centerY="0.75"
                    android:endColor="#a0ffcb00"
                    android:startColor="#80ffd300" />
            </shape>
        </clip>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                    android:angle="270"
                    android:centerColor="#ffffb600"
                    android:centerY="0.75"
                    android:endColor="#ffffcb00"
                    android:startColor="#ffffd300" />
            </shape>
        </clip>
    </item>

</layer-list>

progressDrawable高宽度与实现方式
如何设置高宽度
通过阅读源码,可以发现progressDrawable的高宽度是由padding,maxHeight,maxWidth决定的。本人在实际开发中经常使用maxHeight属性,来调整progressDrawable的高度。

最佳实现方式
progressDrawable的三个部分可以是不同类型的Drawable。本人推荐用<shape>(即ShapeDrawable)来定义这三个部分,这个比较简单。


Android自定义progressbar(雷达扫描样式进度条) Android自定义progressbar(雷达扫描样式进度条) 项目中需要用到类似雷达扫描的进度条,因为时间有余,所以打算自己做一个。查阅了网上很多教程和资料,最终的运行结果如下图 progressbar属性讲解 outerRoundBorderColor_init 表示外圆边框默认颜色,动图里表示浅灰色 outerRoundBorderColor_cover 表示外圆边框覆盖颜色,动图里表... 阅读详情

相关推荐

Android自定义ProgressBar源代码大全:样例与实现

本文还有配套的精品资源,点击获取 简介:Android开发中,ProgressBar是一个重要的UI组件,用于显示数据加载、应用安装或长时间操作的进度状态。本压缩包提供各种样式的ProgressBar源代码,包括基本样式、自定义属性和动画效果等,指导开发者实现多样化和吸引人的进度条效果。自定义ProgressBar涉及继承ProgressBar类、使用Drawable资源、...

weixin_36231030的博客 1397

Android基础--自定义ProgressBar

ProgressBar为进度条控件,有Indeterminate不确定模式和Determinate确定模式两种:①不确定模式通常使用圆形循环动画来表示类似“正在加载”的过程,进度无法确定,具有不确定性;②确定模式是通过将已发生的进度与总量的百分比显示在进度条上,比如下载或上传文件的数量等。

star_nwe的博客 2943

掌握Android中ProgressBar的使用与自定义

在Android开发中,自定义ProgressBar样式和属性是增强用户体验的重要方式。通过XML布局文件,我们可以轻松地定义ProgressBar的基本属性。以下是一些关键的XML属性和它们的作用:android:id: 为ProgressBar设置一个唯一标识符。: 指定ProgressBar的宽度,通常使用或。: 指定ProgressBar的高度,同上。: 设置为true则显示不确定进度的ProgressBar,通常用于后台任务未确定完成时间的情况。

weixin_26850469的博客 1276

Android自定义ProgressBar

好久不写博客了,今天来总结一下自定义ProgressBar的实现。上周做一个游戏资源的在线更新功能,设计给的加载进度条设计图,是无法使用Android原生的ProgressBar来实现的。在百度和GitHub上搜了搜相关的资源,都不符合我的要求。于是,我只能自己去写。先给一下最终的效果: 上面就是我实现的ProgressBar的效果,与业务结合起来,分为几个阶...

zhaojun的博客 2万+

Android自定义ProgressBar实现文字滚动进度效果

摆在面前的第一个问题:是要从零开始造轮子,还是站在巨人肩膀上?经过多个项目的验证,我的答案很明确——继承ProgressBar是最优解。这样做有三大好处:自动继承完整的进度管理机制无需重新实现触摸事件处理完美兼容现有样式体系别小看这三点,它们能帮你省下至少三天的调试时间!来看具体实现:注意到第三参数传入了吗?这个小技巧确保了即使你在XML里只写,也能获得水平进度条的完整行为。是不是很贴心?

weixin_36364707的博客 960

实现Android自定义垂直ProgressBar

在Android开发中,自定义View能够让我们创造出独特的界面元素,提升用户体验。自定义View的过程涉及继承、重写和设计布局属性等多个方面,这对于有经验的开发者来说,既是一次挑战,也是一次机遇。创建自定义ProgressBar类的步骤大致如下:定义一个继承自ProgressBar的新类:新类中可以覆盖构造函数以便于后续初始化。覆盖测量方法:通过覆盖方法来定义如何测量自定义视图的尺寸。覆盖绘制方法:通过覆盖onDraw()方法来实现自定义的绘制逻辑。

weixin_35756637的博客 804

简单的自定义一个ProgressBar进度条

简单的自定义一个ProgressBar进度条

oAiYinSiTan12的博客 1214

生成式引擎优化(GEO)全流程解析

生成式引擎优化(GEO)已成为AI时代数字营销新趋势,通过优化企业内容以提升在AI生成答案中的引用率。本文系统梳理了GEO优化的完整流程,包括:1)前期准备与市场调研;2)数据治理与知识库构建;3)模型适配与算法优化;4)内容权威性建设;5)本地化营销;6)效果监测与优化。研究显示,实施GEO的企业AI曝光率提升62%,转化率增长2.3倍。未来GEO将向多模态内容、实时个性化、垂直场景深化方向发展。企业需建立动态知识图谱,采用结构化数据标记,持续优化内容策略,以在AI搜索时代获取流量优势。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 3246

Android知识点——indeterminate属性

在对进度条SeekBar或者ProgressBar设置进度的时候,有些时候我们并不知具体进度值是多少,但是也需要有动态进度的提醒。 indeterminate 属性非常关键

沐唐风宋雨 5397

避坑指南:QT Creator报Unknown module(s) in QT: serialport的5种解决方法

本文详细解析了Qt Creator报'Unknown module(s) in QT: serialport'错误的5种解决方法,包括检查Qt版本兼容性、安装缺失组件、配置Kit环境等。针对Windows和Linux平台提供具体操作步骤,帮助开发者快速解决串口通信模块问题,提升开发效率。

weixin_29197051的博客 156

PCB压合原理与工艺全流程深度解析

PCB压合是多层印制电路板制造中的核心工序,其本质并非简单物理叠加,而是高分子树脂流动、玻璃布应力释放、铜箔热膨胀及界面能调控的协同过程。理解压合原理,需掌握温度-压力-时间三维曲线动态关系;优化工艺流程,须兼顾叠板精度、热压参数匹配与冷却策略;关键影响因素如半固化片(PP)选型、铜箔表面处理、设备温场均匀性、结构对称性、环境湿度及操作手法,共同决定层间结合力、翘曲度与孔壁质量。本文围绕PCB压合原理、工艺流程、关键影响因素三大维度展开,融合IPC标准、实测数据与产线案例,为工艺工程师、NPI人员及设备维护

weixin_29191081的博客 256

android progressBar属性解析

1、android:indeterminate="true"  不明确(false)就是滚动条的当前值自动在最小到最大值之间来回移动,形成这样一个动画效果,这个只是告诉别人“我正在工作”,但不能提示工作进度到哪个阶段。主要是在进行一些无法确定操作时间的任务时作为提示。而“明确”(true)就是根据你的进度可以设置现在的进度值。 2、android:indeterminateOn

shenyongjun1209的专栏 1780

静止无功补偿SVG的基本控制原理

上图是自励单变量控制框图,基本控制方式为,采集计算得到负载无功电流和SVG输出的无功电流的差值,经过PI调节作为功率角δ和固定的调制深度λ和调制波,经过PWM调制形成开关信号驱动SVG的功率电路。该控制方式使保持调制深度λ(即SVG电压的幅度)不变,通过调整δ来调整直流电压和无功,跟踪输出无功功率,直流电压就会大幅度随动,无功相应速度较慢。SVG通常有他励方式和自励方式,他励方式需要提供外部的直流电源,自励方式通过电网输出有功功率至SVG建立SVG的直流电压。δ为Us和Uc之间的相角差。

weixin_42668920的博客 1988

Android之自定义ProgressBar

本文简单介绍下Android之自定义ProgressBar。

冰点蓝欣的专栏 2244

电力电子技术文章:ACOT控制模式在Buck变换器中的频率稳定性分析

本文深入分析了ACOT控制模式在Buck变换器中实现频率稳定性的原理与优势。通过对比传统COT模式,阐述了ACOT如何通过自适应调整导通时间,将开关频率锁定在设定值,从而有效应对输入电压与负载变化。文章还探讨了其在轻载DCM模式下的高效与平滑切换特性,并提供了关键的设计考量与实战指南。

cc789的博客 1149

java调用第三方api接口获取数据

弊端,但是并不是每个接口都适用于这套模板,之前写的接口不适用,都是在这个模板里做了定制处理(if 特殊表 -》处理),需要考虑兼容之前的代码,这种兼容代码,有风险会改掉之前的逻辑个人喜欢,有一个接口,写一段代码灵活自由些。2.还有一部分是对post请求的返回数据,做处理,因为json返回的格式如果双方没有约定好,里面数据是多层json嵌套,需要做处理。江同事交接的就是这个代码模板,可以看下源码调试一下,之前交接的视频,也可以看下,主要还是看代码理解快些,将 写好的代码达成jar包,上传到linux上去,

随风不随水的博客 2036

Android 自定义Progressbar,任何图片都能当成progressbar转动起来

今天群里边有人问怎么自定义Android holo主题下的Progressbar; 我想到之前做过自定义Progressbar,通过自己写动画和Style可以用任何图片当作progressbar来转动; 分享下我是如何做的,其实很简单的三步就能完成: 1.找到一张图片,写一个动画: <animated-rotate xmlns:android="http://schemas.android

金禅的专栏 8204

告别代码移植烦恼:STM32CubeMX 6.4.0 + STM32F407ZGT6 + YT8512C PHY芯片的LWIP网络配置全攻略

本文详细介绍了如何使用STM32CubeMX 6.4.0配置STM32F407ZGT6与YT8512C PHY芯片的LWIP网络适配,包括硬件特性解析、STM32CubeMX基础配置、专用驱动适配和LWIP协议栈定制化配置,帮助开发者解决PHY芯片差异导致的网络问题。

weixin_28718793的博客 290

android SeekBar和ProgressBar的使用

改变进度条的样式改变滑块的样式进入SeekBar 的样式文件看一看androidandroidandroid

qq_36699930的博客 2万+

海康Visionmaster-通讯管理:ModBus 通信发送非整型 数据的方法

海康Visionmaster-通讯管理:ModBus 通信发送非整型 数据的方法

视觉人机器视觉的博客 1741

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android 自定义谷歌风格ProgressBar

speed);.getFloat(speed);false);break;break;break;default:// colors= 0) {= null) {if (colors!else= 0) {if (colors!0));0));.getFloat(0));false));false));false)) {break;break;break;break;

2501_90499523的博客 884

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android实现带箭头的自定义Progressbar

一、闲话: Android原生的进度条可以根据不同的主题有不同的视觉效果,但任何一种主题下的进度条和应用程序的视觉配合起来都显得格格不入,所以多数时候我们需要自定义Progressbar,最简单的是在布局文件中通过“android:progressDrawable”为Progressbar换背景和进度图片,换图后的效果类似于这样:   但你会发现,进度图片像是被截断了一样,看上去同样不美观,

mingy的专栏 6187

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android自定义progressbar样式,Android自定义ProgressBar,仿IOS ASProgressPopUpView

progress = 200.pngprogress = 500.png之前在做一个app中,发现IOS有一个ASProgressPopUpView的第三方控件满足需求的效果。可能因为我人比较懒,所以也没去详细地找出android是否有具体的一个第三方框架可以做到这样的一个效果。我自己具体分析了一下,发现做一个这样的自定义View好像并不难,也算是本人第一个小小的自定义View。在一个师兄提醒和a...

weixin_42367557的博客 955

Android ProgressBar颜色设置

Android ProgressBar 颜色设置指南 在 Android 开发中,ProgressBar 是用于显示进度的常用组件。在这篇文章中,我们将学习如何自定义 ProgressBar 的颜色。我们将按照以下步骤进行操作: 步骤 描述 步骤 1 创建一个新的 Android 项目 步骤 2 在布局中...

weixin_40771797的博客 1530

Android常用界面控件——ProgressBar

android:id: 设置ProgressBar的唯一标识符。和: 设置ProgressBar的宽度和高度。style="?: 设置ProgressBar的样式为水平进度条。: 设置ProgressBar的最大值。: 设置ProgressBar的当前进度值。上述代码创建了一个水平的ProgressBar,使用了Android中自带的样式。

rr_R_rr的博客 3579

ProgressBar 自定义样式与动画实战

本文详细介绍了Android ProgressBar自定义样式与动画的实战技巧。从基础Drawable结构解析到高级动画实现,涵盖水平进度条、圆形进度条及游戏风格分段式进度条的开发方法,帮助开发者创建视觉出众且性能优化的进度指示器,提升应用用户体验。

ii567的博客 875
上一篇: [开发笔记-2013/01/31] Android频繁更新TextView内容的困惑
下一篇: Android画图drawText入门(一)-字体结构
Zenip
博客等级 码龄14年 10粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值