应用 ColorFilter / ColorMatrix 将图像完全变白

Apply ColorFilter / ColorMatrix to turn image completely white

我的工具栏上有一个圆形的 ProgressBar,用于显示正在发生的一些不确定的进度,但是 ProgressBar 的默认样式(我知道的唯一一个使它变成圆环的样式)与工具栏的颜色相同( 'colorPrimary'颜色)。

我试过的样式是?android:attr/progressBarStyleLarge?android:attr/progressBarStyleLargeInverse,两者的颜色都和工具栏一样,所以不可见。

我读到我可以通过应用滤色器来改变颜色:

toolbarProgress.getIndeterminateDrawable().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);

但是,我找不到一个 'PorferDuff.Mode' 可以将彩色图像变成全白图像(同时保持 alpha 透明度不变)。

除了使用 PorterDuff 模式,我还可以应用 ColorMatrix。例如把它变成灰度我可以用这个:

        ColorMatrixColorFilter filter = new ColorMatrixColorFilter(new float[] {
            0.5f, 0.5f, 0.5f, 0, 0,
            0.5f, 0.5f, 0.5f, 0, 0,
            0.5f, 0.5f, 0.5f, 0, 0,
            0, 0, 0, 1, 0
    });
    toolbarProgress.getIndeterminateDrawable().setColorFilter(filter);

同样的问题:我找不到将图像完全变白的正确矩阵。灰度很接近,但变成了灰色而不是纯白色。

我想要的是将所有彩色像素变成纯白色,并让所有 alpha 像素透明。

除非有更简单的方法来更改本机 ProgressBar 的颜色..?

一定要ColorMatrixColorFilter吗?您可以使用 DrawableCompatDrawables 着色。

Drawable drawable = DrawableCompat.wrap(progressBar.getIndeterminateDrawable());
DrawableCompat.setTint(drawable, Color.WHITE);
toolbarProgress.setIndeterminateDrawable(drawable);