ProgressBar进度条

简介

        ProgressBar 是 Android 中用于显示任务进度或加载状态的UI控件。它可以给用户提供一个视觉反馈,表明某个操作正在进行中或完成的百分比。ProgressBar 主要有两种类型:确定性(determinate)和不确定性(indeterminate)。

一、ProgressBar重点属性说明

  progress(当前进度值属性:

                是一个非常核心的属性,它用来表示进度条当前完成的进度值。以下是关于progress属性的详细说明:

        对应属性:progressTint = 进度颜色,progressTintMode = progressBackgroudTint = 背景颜色,progressBackgroundTintMode = 能控制颜色如何与背景交互,比如添加透明度、阴影效果等,progressDrawable = 自定义进度条样式为Drawable资源并应用。

  • 属性名android:progress
  • 类型:整数(integer)
  • 默认值:0
  • 功能:此属性用于设置进度条当前所处的进度位置,其值必须在0和max属性所设定的最大值之间。当进度条处于确定模式(非不确定模式,即android:indeterminatefalse)时,这个属性就显得尤为重要,因为它直接反映了进度的完成百分比。
  • 例如,如果你有一个进度条的最大值设置为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开发中的 ProgressBarSeekBar 控件。它的主要用途是当需要向用户展示两个级别的进度信息时,例如下载文件时,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() 获取最大进度值,最后计算出当前进度的百分比。这对于向用户反馈任务完成程度非常有用。

简单常用方法:

  1. setMax(int max): 设置进度条的最大值。这决定了进度条满格时的值,默认通常是100。

  2. getMax(): 获取进度条的最大值。

  3. setProgress(int progress): 设置当前的进度值。此值必须在最小值(通常是0)和setMax设定的最大值之间。

  4. getProgress(): 获取当前的进度值。

  5. setSecondaryProgress(int secondaryProgress): 设置辅助进度值,用于显示额外的信息,如缓冲进度。

  6. getSecondaryProgress(): 获取辅助进度值。

  7. setIndeterminate(boolean indeterminate): 设置进度条是否处于不确定模式。如果是true,则显示一个无限循环的动画,而不显示具体的进度。

  8. isIndeterminate(): 判断进度条是否处于不确定模式。

  9. setIndeterminateDrawable(Drawable d): 设置不确定模式下进度条的动画Drawable。

  10. 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_colorR.color.stroke_colorR.drawable.your_custom_progress_drawable 为你的实际资源ID。如果你选择在XML中定义Drawable,你需要创建相应的XML文件来定义进度条的样式。这种方法提供了高度的自定义性,使得你可以根据应用的设计需求调整进度条的视觉效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android洋芋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值