2

要对可绘制对象进行灰度化,我会这样做:

ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(200);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
drawable.setColorFilter(filter);

正如贾斯汀所说。它工作正常。

我正在使用 svg-android 库。所以我正在尝试:

PictureDrawable pictureDrawable = svg.createPictureDrawable();
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(200);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
pictureDrawable.setColorFilter(filter);
imageView.setImageDrawable(pictureDrawable);

但是什么也没有发生……怎么了?

4

2 回答 2

3

恐怕我在Android源代码中找到了原因:

可绘制的.java

public abstract void setColorFilter(ColorFilter cf);

PictureDrawable.java

@Override
public void setColorFilter(ColorFilter colorFilter) {}

简单地说,任何对 s 的调用setColorFilter都是无用PictureDrawable的。

于 2012-12-01T03:59:36.670 回答
1

我刚刚通过谷歌搜索找到了这个页面。如果有人仍然感兴趣,我正在使用一些解决方法来解决同样的问题:

Picture pic = svg.getPicture();
Bitmap bm = Bitmap.createBitmap(pic.getWidth(), pic.getHeight(), Bitmap.Config.ARGB_4444);
Canvas c = new Canvas(bm);
c.drawPicture(pic, new Rect(0,0,pic.getWidth(), pic.getHeight()));
c.save();
BitmapDrawable drawable = new BitmapDrawable(getResources(), bm);
drawable.setColorFilter(getBlackAndWhiteFilter());
imageView.setImageDrawable(drawable);

而不是使用 pic.getWidth() 和 pic.getWidth() 你当然可以使用你喜欢的图像大小 - 所以位图不会画得太大,因为这可能会降低一些性能。

于 2013-07-17T16:49:24.650 回答