Android ProgressBar添加小圆点
时间: 2023-08-05 11:30:28 浏览: 281
要在 Android ProgressBar 中添加小圆点,可以使用自定义 Drawable 的方式来实现。以下是一个简单的实现步骤:
1. 在 drawable 文件夹下创建一个名为 custom_progress_bar.xml 的文件,用于定义进度条的样式。与上面的示例不同,这里需要添加一个小圆点的样式:
```xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 进度条背景 -->
<item android:id="@android:id/background">
<shape>
<corners android:radius="5dp" />
<gradient
android:startColor="#cfcfcf"
android:endColor="#cfcfcf"
android:angle="270"/>
</shape>
</item>
<!-- 进度条 -->
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="5dp" />
<gradient
android:startColor="#FF0000"
android:centerColor="#FF9900"
android:endColor="#FFFF00"
android:angle="270" />
</shape>
</clip>
</item>
<!-- 小圆点 -->
<item android:id="@android:id/progress">
<shape android:shape="oval">
<size
android:width="10dp"
android:height="10dp" />
<solid android:color="#FFFF00" />
</shape>
</item>
</layer-list>
```
这里添加了一个形状为圆形的小圆点,颜色与进度条的当前颜色相同,大小为 10dp。
2. 在代码中获取 ProgressBar 控件,并设置进度:
```java
ProgressBar progressBar = findViewById(R.id.progressBar);
// 设置进度条进度
progressBar.setProgress(50);
```
3. 如果需要将小圆点放置在进度条的当前进度位置,可以使用 setProgressDrawable 方法将自定义 Drawable 设置为进度条的样式,并在 OnProgressChangedListener 中获取当前进度位置,然后动态设置小圆点的位置。具体实现如下:
```java
// 获取自定义 Drawable
Drawable customDrawable = getResources().getDrawable(R.drawable.custom_progress_bar);
// 设置自定义 Drawable
progressBar.setProgressDrawable(customDrawable);
// 添加进度改变监听器
progressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// 获取进度条宽度
int width = seekBar.getWidth();
// 获取自定义 Drawable
Drawable customDrawable = seekBar.getProgressDrawable();
if (customDrawable != null && customDrawable instanceof LayerDrawable) {
// 获取进度条 LayerDrawable
LayerDrawable layerDrawable = (LayerDrawable) customDrawable;
// 获取小圆点 Drawable
Drawable thumbDrawable = layerDrawable.findDrawableByLayerId(android.R.id.progress);
if (thumbDrawable != null) {
// 计算小圆点位置
int thumbX = (int) (width * (float) progress / seekBar.getMax());
int thumbY = thumbDrawable.getIntrinsicHeight() / 2;
// 设置小圆点位置
thumbDrawable.setBounds(thumbX, 0, thumbX + thumbDrawable.getIntrinsicWidth(), thumbDrawable.getIntrinsicHeight());
}
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
```
这样就可以在 Android ProgressBar 中添加小圆点,并将其放置在当前进度位置了。
阅读全文