Android 应用ColorFilter/ColorMatrix使图像完全变白

Android 应用ColorFilter/ColorMatrix使图像完全变白,android,android-progressbar,colormatrix,colormatrixfilter,Android,Android Progressbar,Colormatrix,Colormatrixfilter,我的工具栏上有一个圆形进度条,用于显示一些不确定的进度,但是进度条的默认样式(我所知道的唯一一个使其成为环形的样式)与工具栏的颜色相同(“colorPrimary”颜色) 我尝试的样式是?android:attr/progressBarStyleLarge和?android:attr/progressBarStyleLargeInverse,它们都与工具栏颜色相同,因此不可见 我了解到我可以通过应用颜色过滤器来更改颜色,例如: toolbarProgress.getIndeterminateDr

我的工具栏上有一个圆形进度条,用于显示一些不确定的进度,但是进度条的默认样式(我所知道的唯一一个使其成为环形的样式)与工具栏的颜色相同(“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
?您可以使用
DrawableCompat
Drawables
进行着色。


谢谢我不知道DrawableCompat的存在(我想它在支持库中?)。我应该提到我需要向后兼容到sdk 11(所以不能使用色调),但这应该可以很好地工作。我稍后会试试,谢谢。正确。它是android.support.v4的一部分。谢谢,它只做了一些小的修改。我没有将“drawable”对象设置为不确定的rawable,而是必须使用DrawableCompat.wrap函数的结果,例如:drawable wrapped=DrawableCompat.wrap(drawable)。。。toolbarProgress.SetUndeterminatedRavable(已包装);此外,还需要支持库22.1.0或更高版本。任何较低的版本都不能确保Android<5.0上没有崩溃,但它不会应用色调。
Drawable drawable = DrawableCompat.wrap(progressBar.getIndeterminateDrawable());
DrawableCompat.setTint(drawable, Color.WHITE);
toolbarProgress.setIndeterminateDrawable(drawable);