自定义Android下载进度条:实现百分比效果
158 浏览量
更新于2024-08-28
收藏 72KB PDF 举报
"Android实现一个百分比下载进度条的自定义View,通过获取自定义属性、绘制底色和进度条以及显示百分比文字来达到效果。"
在Android开发中,创建一个具有百分比显示的下载进度条可以极大地提升用户体验。为了实现这样一个自定义的进度条,开发者通常会通过自定义View来完成。在这个案例中,我们将探讨如何实现这样的功能。
首先,我们需要在`attrs.xml`文件中定义自定义属性。在这个例子中,我们只有一个属性`dptextsize`,用于设置百分比文字的大小,其格式为尺寸(dimension)。以下是`attrs.xml`文件的内容:
```xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="downloadProgressBar">
<attr name="dptextsize" format="dimension"/>
</declare-styleable>
</resources>
```
接下来,我们创建一个名为`DownLoadProgressbar`的自定义View类。这个类需要继承自`View`,并实现绘制进度条的功能。在类中,我们需要获取自定义属性的值,这可以通过`TypedArray`来完成。此外,还需要重写`onDraw()`方法来绘制进度条的背景(灰色线)、当前进度(橘黄色线)以及百分比文字。以下是一个简化的`DownLoadProgressbar`类的示例:
```java
package com.ywl5320.downloadprogressdemo.downloadview;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import com.ywl5320.downloadprogressdemo.R;
public class DownLoadProgressbar extends View {
private int dpTextSize; // 自定义属性,百分比文字大小
public DownLoadProgressbar(Context context) {
this(context, null);
}
public DownLoadProgressbar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DownLoadProgressbar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs);
}
private void init(AttributeSet attrs) {
if (attrs != null) {
TypedArray array = getContext().obtainStyledAttributes(attrs, R.styleable.downloadProgressBar);
dpTextSize = array.getDimensionPixelSize(R.styleable.downloadProgressBar_dptextsize, 16); // 获取dptextsize属性的值
array.recycle();
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 绘制灰色底色线条
Paint backgroundPaint = new Paint();
backgroundPaint.setColor(getResources().getColor(android.R.color.darker_gray));
canvas.drawRect(0, 0, getWidth(), getHeight(), backgroundPaint);
// 计算并绘制进度条(橘黄色线条)
int progress = ...; // 从实际下载进度获取
Paint progressPaint = new Paint();
progressPaint.setColor(getResources().getColor(android.R.color.holo_orange_light));
float progressWidth = ...; // 根据进度计算宽度
canvas.drawRect(0, 0, progressWidth, getHeight(), progressPaint);
// 绘制百分比文字
String percentageText = String.format("%.0f%%", progress * 100f);
Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
textPaint.setTextSize(dpTextSize);
textPaint.setColor(getResources().getColor(android.R.color.black));
Rect bounds = new Rect();
textPaint.getTextBounds(percentageText, 0, percentageText.length(), bounds);
int x = (getWidth() - bounds.width()) / 2;
int y = (getHeight() + bounds.height()) / 2;
canvas.drawText(percentageText, x, y, textPaint);
}
}
```
在实际使用时,你需要在布局文件中引用这个自定义View,并设置`dptextsize`属性。例如:
```xml
<com.ywl5320.downloadprogressdemo.downloadview.DownLoadProgressbar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dptextsize="14dp" />
```
最后,你可以在Activity或Fragment中获取这个自定义View,并根据下载进度更新`DownLoadProgressbar`的`progress`值,然后调用`invalidate()`方法触发重绘,以实时显示下载进度。
通过这种方式,你就能在Android应用中实现一个美观且实用的百分比下载进度条,提升用户对下载过程的感知和体验。
2023-05-30 上传
2023-09-23 上传
2023-04-26 上传
2024-10-09 上传
2024-11-09 上传
2024-09-22 上传
weixin_38586186
- 粉丝: 9
- 资源: 943
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码