Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何替代ProgressBar,以便将进度填充更改为具有圆角和颜色的可绘制_Android - Fatal编程技术网

Android 如何替代ProgressBar,以便将进度填充更改为具有圆角和颜色的可绘制

Android 如何替代ProgressBar,以便将进度填充更改为具有圆角和颜色的可绘制,android,Android,我有一个我通过编程创建的特定颜色 我在渐变绘图中使用这种颜色 我需要重写ProgressBar源代码的某些部分,以便在创建进度填充颜色时使用GradientDrawable,但我不知道应该重写哪个部分以及将代码放在哪里 这是progressbar源代码: 这是我想要使用的绘图工具,但它没有相应地扩展到所取得的进展 public static GradientDrawable progressBarProgressDrawable(Context context, float[] radii)

我有一个我通过编程创建的特定颜色

我在渐变绘图中使用这种颜色

我需要重写ProgressBar源代码的某些部分,以便在创建进度填充颜色时使用GradientDrawable,但我不知道应该重写哪个部分以及将代码放在哪里

这是progressbar源代码:

这是我想要使用的绘图工具,但它没有相应地扩展到所取得的进展

public static GradientDrawable progressBarProgressDrawable(Context context, float[] radii) {
    GradientDrawable shape = new GradientDrawable();
    shape.setCornerRadii(radii);
    shape.setColor(context.getResources().getColor(R.color.green_button));

    float brightness = 0.9f;
    float[] hsb = new float[] { 43, 23, (33 * brightness) };
    int alpha = 77;
    int newColor = Color.HSVToColor(alpha, hsb);
    shape.setColor(newColor);

    return shape;
}
ProgressBar有一个方法

如果要覆盖它,可以

@Override
public void setBackgroundColor (int color) {
    int c = 0x0000ff00; // Using green
    super.setBackgroundColor(c);
}
或者你可以打个电话

ProgressBar bar = new ProgressBar();
bar.setBackgroundColor(c);
试试这个:

    final ProgressBar pb = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
    setContentView(pb);

    GradientDrawable gd = new GradientDrawable();
    gd.setCornerRadius(32);
    final Drawable cd = new ClipDrawable(gd, Gravity.LEFT, ClipDrawable.HORIZONTAL);
    pb.setProgressDrawable(cd);

    OnTouchListener l = new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int progress = (int) (event.getX() * pb.getMax() / pb.getWidth());
            pb.setProgress(progress);
            float[] hsv = {
                    event.getX() * 360 / pb.getWidth(), 1, 1
            };
            int color = Color.HSVToColor(hsv);
            Log.d(TAG, "onTouch " + Integer.toHexString(color));
            cd.setColorFilter(color, Mode.SRC_ATOP);
            return true;
        }
    };
    pb.setOnTouchListener(l);

您是否仅为更改颜色而覆盖进度条?你可以用一种简单得多的方法来做。查看此处检查并在进度中使用Drawable.setColorFilterDrawable@pskink在这种情况下,我应该使用什么porterduff模式?getProgressDrawable返回空值:(我想更改进度填充颜色,而不是背景颜色。另外,我想设置一个自定义的可绘制颜色,以查看xml资源文件中定义的默认进度可绘制颜色。)