安卓自定义一个水平进度条,根据后台返回的数据显示进度,详细过程的源码
时间: 2024-03-26 15:39:01 浏览: 68
安卓源码圆形自定义进度条.zip
好的,下面是一个简单的安卓自定义水平进度条的实现代码:
1. 首先,在 `res/layout` 文件夹下创建一个 XML 布局文件 `custom_progress_bar.xml`,代码如下:
```xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/progress_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="16sp"
android:textColor="#000000"/>
<ProgressBar
android:id="@+id/progress_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:progress="0"
android:max="100"/>
</LinearLayout>
```
这个布局文件包含了一个 `TextView` 和一个 `ProgressBar`,其中 `TextView` 用于显示进度的文字说明,`ProgressBar` 用于显示实际的进度条。
2. 接下来,在 `res/values` 文件夹下创建一个 XML 文件 `attrs.xml`,代码如下:
```xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomProgressBar">
<attr name="progress_text" format="string"/>
<attr name="progress_value" format="integer"/>
</declare-styleable>
</resources>
```
这个文件定义了自定义进度条的两个属性:`progress_text` 用于设置进度条的文字说明,`progress_value` 用于设置进度条的进度值。
3. 然后,在 `res/values` 文件夹下创建一个 XML 文件 `colors.xml`,代码如下:
```xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
```
这个文件定义了进度条的颜色。
4. 最后,在 `src/main/java` 文件夹下创建一个 Java 类 `CustomProgressBar.java`,代码如下:
```java
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
public class CustomProgressBar extends LinearLayout {
private TextView mProgressText;
private ProgressBar mProgressBar;
public CustomProgressBar(Context context, AttributeSet attrs) {
super(context, attrs);
// 加载布局
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.custom_progress_bar, this, true);
// 获取布局中的控件
mProgressText = (TextView) findViewById(R.id.progress_text);
mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
// 获取自定义属性的值
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomProgressBar, 0, 0);
String progressText = a.getString(R.styleable.CustomProgressBar_progress_text);
int progressValue = a.getInt(R.styleable.CustomProgressBar_progress_value, 0);
a.recycle();
// 设置进度条的文字说明和进度值
mProgressText.setText(progressText);
mProgressBar.setProgress(progressValue);
}
// 设置进度条的进度值
public void setProgressValue(int progressValue) {
mProgressBar.setProgress(progressValue);
}
// 获取进度条的进度值
public int getProgressValue() {
return mProgressBar.getProgress();
}
// 设置进度条的文字说明
public void setProgressText(String progressText) {
mProgressText.setText(progressText);
}
// 获取进度条的文字说明
public String getProgressText() {
return mProgressText.getText().toString();
}
// 设置进度条的颜色
public void setProgressColor(int color) {
mProgressBar.getProgressDrawable().setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_IN);
}
}
```
这个类继承了 `LinearLayout`,并在构造函数中加载了之前创建的布局文件 `custom_progress_bar.xml`。此外,这个类还提供了几个方法用于设置和获取进度条的属性值,比如 `setProgressValue()` 方法用于设置进度条的进度值,`setProgressText()` 方法用于设置进度条的文字说明,`setProgressColor()` 方法用于设置进度条的颜色等。
使用时,只需要在 XML 布局文件中引用这个自定义控件即可,比如:
```xml
<com.example.CustomProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
app:progress_text="Progress"
app:progress_value="50"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
```
其中 `app:progress_text` 和 `app:progress_value` 分别为自定义属性的值。在代码中,可以通过 `findViewById()` 方法获取这个自定义控件的实例,并调用相应的方法设置和获取属性值,比如:
```java
CustomProgressBar progressBar = findViewById(R.id.progress_bar);
progressBar.setProgressValue(75);
progressBar.setProgressText("Loading...");
progressBar.setProgressColor(Color.BLUE);
```
阅读全文