为了绘制可绘制的灰度:
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(200);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
drawable.setColorFilter(filter);
为Justin said。它工作正常。
我正在使用svg-android库。所以我在尝试:
PictureDrawable pictureDrawable = svg.createPictureDrawable();
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(200);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
pictureDrawable.setColorFilter(filter);
imageView.setImageDrawable(pictureDrawable);
但没有任何反应......出了什么问题?
答案 0 :(得分:3)
我担心我在Android源代码中找到了原因:
Drawable.java
public abstract void setColorFilter(ColorFilter cf);
PictureDrawable.java
@Override
public void setColorFilter(ColorFilter colorFilter) {}
简单地说,对setColorFilter
的任何调用对PictureDrawable
都没用。
答案 1 :(得分: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(),你当然可以使用你喜欢的图像大小 - 所以位图不会被绘得太大,因为这可能会花费一些性能。