可以在自定义Progressbar progressDrawable中执行圆角吗?

b-r*_*yce 5 layout android skinning rounded-corners progress-bar

我有一个应该看起来像附加图像的进度条:在此输入图像描述

而且我已经做了很长的路.我非常接近唯一不起作用的部分是progressDrawable的圆角.这是我的样子.(注意,用红色圈出,白色轮廓内的填充没有圆角):在此输入图像描述

所以,当进度条用形状,渐变或颜色着色时,我发现了一些方法可以使这个工作.但是,我无法通过progressDrawable获取图像.

这是我的扩展ProgressBar的类

public class RoundedProgressBar extends ProgressBar{
private Paint paint;

public RoundedProgressBar(Context context) {
    super(context);
    setup();
}

public RoundedProgressBar(Context context, AttributeSet attrs) {
    super(context, attrs);
    setup();
}

public RoundedProgressBar(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    setup();    ;
}

protected void setup()
{
    paint = new Paint();
}

@Override
protected synchronized void onDraw(Canvas canvas) {
    // First draw the regular progress bar, then custom draw our text
    super.onDraw(canvas);
    paint.setColor(Color.WHITE);
    paint.setStyle(Paint.Style.STROKE);
    RectF r = new RectF(0,0,getWidth()-1,getHeight()-1);
    canvas.drawRoundRect(r,getHeight()/2,getHeight()/2, paint);
}
 }
Run Code Online (Sandbox Code Playgroud)

这是我的选择器:

<layer-list
 xmlns:android="http://schemas.android.com/apk/res/android"
 >
 <item
 android:id="@android:id/background"
 android:drawable="@drawable/slider_track" />
 <item
 android:id="@android:id/secondaryProgress"
 android:drawable="@drawable/slider_track" />
 <item
 android:id="@android:id/progress"
 android:drawable="@drawable/slider_track_progress" />
 </layer-list>
Run Code Online (Sandbox Code Playgroud)

以下是选择器中使用的图像:

slider_track->在此输入图像描述
slider_track_progress->在此输入图像描述

这是我将进度条嵌入到我的活动布局中的位置

<com.android.component.RoundedProgressBar
    android:id="@+id/player_hp_bar"
    android:layout_width="fill_parent"
    android:layout_height="36dip"
    android:layout_marginLeft="30dip"
    android:layout_marginRight="30dip"
    android:max="100"
    style="?android:attr/progressBarStyleHorizontal"
    android:progressDrawable="@drawable/slider_layer_list"
    android:progress="20"
    android:maxHeight="12dip"
    android:minHeight="12dip"
/>
Run Code Online (Sandbox Code Playgroud)

有谁知道如何使这项工作?

Whi*_*e-E 1

不确定您是否真的可以通过 API 圆化边缘,但是您可以很容易地在白色轮廓和实际进度对象之间添加一个新层吗?该图层可以是白色轮廓的精确剪切,因此进度条不会显示在轮廓之外。