简介
ProgressBar
是 Android 中用于显示任务进度或加载状态的UI控件。它可以给用户提供一个视觉反馈,表明某个操作正在进行中或完成的百分比。ProgressBar
主要有两种类型:确定性(determinate)和不确定性(indeterminate)。
一、ProgressBar重点属性说明
progress(
当前进度值)
属性:
是一个非常核心的属性,它用来表示进度条当前完成的进度值。以下是关于progress
属性的详细说明:
对应属性:progressTint = 进度颜色,progressTintMode = progressBackgroudTint = 背景颜色,progressBackgroundTintMode = 能控制颜色如何与背景交互,比如添加透明度、阴影效果等,progressDrawable = 自定义进度条样式为Drawable资源并应用。
- 属性名:
android:progress
- 类型:整数(integer)
- 默认值:0
- 功能:此属性用于设置进度条当前所处的进度位置,其值必须在0和
max
属性所设定的最大值之间。当进度条处于确定模式(非不确定模式,即android:indeterminate
为false
)时,这个属性就显得尤为重要,因为它直接反映了进度的完成百分比。 - 例如,如果你有一个进度条的最大值设置为100(即
android:max="100"
),并且你想显示已经完成了60%的进度,你应该将android:progress="60"
。 - 效果:
progressTintMode颜色混合模式:
progressTintMode与
progressBackgroundTintMode是Android中用来设置进度条(ProgressBar
)进展部分颜色混合模式的属性。这个属性影响进度条进度条填充部分的颜色显示方式,当设置了特定的着色(tint)颜色时,progressTintMode
决定了该着色色与进度条背景之间的混合效果。它接受的值与之前提到的图像混合模式相似,包括但不限于src_over
, src_in
, src_atop
, multiply
, screen
, 和 add。
- src_over: 进度颜色直接覆盖在进度条的背景上,这是默认模式,适用于大多数情况。
- src_in:这会使进度条仅在与背景重叠的部分显示着色颜色,其余部分透明,不过在进度条场景下,这种效果可能不太常见。
src_atop:
这个模式下,进度条颜色只在与背景相交的地方显示,背景其它部分不受影响,这也不太适用于标准进度条,但可用于特殊视觉效果。- multiply: 进度颜色与背景颜色相乘混合,可以用于创建更深层、饱和度更低的进度颜色效果。
- screen: 使进度颜色与背景颜色执行屏幕混合,得到的颜色通常更亮,适合创造高光或光晕效果。
- add: 将进度颜色与背景颜色的值相加,适用于模拟发光或高亮度效果,但需注意颜色溢出导致的过饱和问题。
indeterminate
属性
用于控制进度条是显示具体的进度还是不确定的加载状态。Tint与TintMode用法与progress上述讲解相同。
- 属性名:
android:indeterminate
- 类型:布尔值(Boolean)
- 默认值:
false
- 功能:当设置为
true
时,进度条进入不确定模式,通常表现为循环动画,用于表示正在进行某项操作但无法或不需要给出具体进度的情况,如数据加载、网络请求等。 - 当设置为
false
时,进度条显示具体的进度,从0%到100%,适用于可以预知完成进度的任务。
indeterminateBehavior
进度条的显示行为:
- 自动切换:在没有指定具体进度时自动切换到不确定模式,一旦有明确进度则自动切换回确定模式。
- 动画风格:定制不确定模式下的动画效果,比如不同的滚动、闪烁或脉冲样式。
- 延迟策略:定义在确定加载速度过慢或初始加载时何时启用不确定模式的规则。
- 用户交互响应:根据用户的操作(如点击、滑动)改变进度条的显示行为。
-
indeterminateBehavior=repeat
-
indeterminateBehavior=cycle属性
indeterminateOnly状态:
- 任务的进度无法准确测量,或者显示具体进度没有必要。
- 用户界面设计要求使用一个一致的加载指示器,不包括从不确定到确定状态的转换。
- 为了提高可用性或美观,简化组件,去除处理确定和不确定两种状态的复杂性。
indeterminateDuration动画的视觉效果:
间接控制动画的外观和速度,而不是直接设置一个“持续时间”。
secondaryProgress第二个进度(辅助进度):
表示辅助进度,比如缓冲进度、预加载量等,用于表示除了主进度之外的另一个进度状态。这个属性常见于Android开发中的 ProgressBar
或 SeekBar
控件。它的主要用途是当需要向用户展示两个级别的进度信息时,例如下载文件时,progress
展示已下载的部分,而 secondaryProgress
可能会展示比如已缓冲的部分,这样用户可以了解到不仅当前下载了多少,还有多少已经预加载到了缓冲区,以便后续播放时更加流畅。
效果:
secondaryProgress相关属性:用法及原理与progress相应属性相同。
Visibility显示状态(是否可见):
Visible (默认): 进度条默认是可见的,无需特别设置此属性。
Invisible: 进度条不可见,但依然占据布局空间。
Gone: 进度条既不可见也不占据布局空间,其他视图可能会重新排列以填补空出的空间。
二、ProgressBar重点方法说明
方法与上述属性中的原理及使用一直,只是上述的内容是在xml文件中,方法是在代码中调用。(PeogressBar在代码中就是一个类,类中有很多个方法给我们调用)。
getMax()
方法是进度条(ProgressBar)类中的一个常用方法,它用于获取进度条允许的最大值。这个值设定了进度条的上限,表示进度完成的100%状态。当你需要计算进度的百分比或者动态设置进度时,了解当前进度条的最大值是非常重要的。
在编程中使用 getMax()
的一个基本示例场景是计算当前进度的百分比显示给用户。例如,在Android平台上,你可以这样使用:
1int currentProgress = progressBar.getProgress(); // 获取当前进度
2int maxProgress = progressBar.getMax(); // 获取最大进度
3float progressPercentage = (float) currentProgress / maxProgress * 100; // 计算进度百分比
4
5Log.d("Progress", "当前进度百分比: " + progressPercentage + "%");
这段代码首先通过 getProgress()
获取进度条的当前进度值,然后通过 getMax()
获取最大进度值,最后计算出当前进度的百分比。这对于向用户反馈任务完成程度非常有用。
简单常用方法:
-
setMax(int max)
: 设置进度条的最大值。这决定了进度条满格时的值,默认通常是100。 -
getMax()
: 获取进度条的最大值。 -
setProgress(int progress)
: 设置当前的进度值。此值必须在最小值(通常是0)和setMax
设定的最大值之间。 -
getProgress()
: 获取当前的进度值。 -
setSecondaryProgress(int secondaryProgress)
: 设置辅助进度值,用于显示额外的信息,如缓冲进度。 -
getSecondaryProgress()
: 获取辅助进度值。 -
setIndeterminate(boolean indeterminate)
: 设置进度条是否处于不确定模式。如果是true
,则显示一个无限循环的动画,而不显示具体的进度。 -
isIndeterminate()
: 判断进度条是否处于不确定模式。 -
setIndeterminateDrawable(Drawable d)
: 设置不确定模式下进度条的动画Drawable。 -
setProgressDrawable(Drawable d)
: 设置确定模式下进度条的Drawable,控制进度条的外观。
三、setProgressDrawable()进度条(ProgressBar
)进展部分的图形外观:
setProgressDrawable()
是在Android开发中用来设置进度条(ProgressBar
)进展部分的图形外观的方法。这个方法允许你自定义进度条的样式,比如颜色、渐变效果或其他图形元素,从而使进度条与你的应用界面更加协调。该方法接受一个 Drawable
对象作为参数。Drawable
是Android中用来绘制图形的一个接口,它可以是一个颜色、图形、图层列表、状态列表或者更复杂的可绘制对象,如动画Drawable。
下面是一个简单的例子,展示了如何使用 setProgressDrawable()
来改变进度条的颜色:
// 在Java代码中设置
GradientDrawable progressDrawable = new GradientDrawable();
progressDrawable.setColor(ContextCompat.getColor(this, R.color.your_custom_color)); // 设置进度条颜色
progressDrawable.setStroke(2, ContextCompat.getColor(this, R.color.stroke_color)); // 可选,设置边框颜色和宽度
progressDrawable.setCornerRadius(50); // 设置圆角,如果需要的话
ProgressBar progressBar = findViewById(R.id.your_progress_bar);
progressBar.setProgressDrawable(progressDrawable);
// 或者在XML中预先定义一个Drawable,然后通过其资源ID设置
progressBar.setProgressDrawable(ContextCompat.getDrawable(this, R.drawable.your_custom_progress_drawable));
确保替换 R.color.your_custom_color
、R.color.stroke_color
和 R.drawable.your_custom_progress_drawable
为你的实际资源ID。如果你选择在XML中定义Drawable,你需要创建相应的XML文件来定义进度条的样式。这种方法提供了高度的自定义性,使得你可以根据应用的设计需求调整进度条的视觉效果。