Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 灰度可显示_Android_Svg - Fatal编程技术网

Android 灰度可显示

Android 灰度可显示,android,svg,Android,Svg,要对可绘制图像进行灰度显示,我需要执行以下操作: ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(200); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); drawable.setColorFilter(filter); 作为。它很好用 我正在使用svg android库。所以我试着: PictureDrawable picture

要对可绘制图像进行灰度显示,我需要执行以下操作:

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);

但是什么都没发生。。。怎么了?

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

Drawable.java

public abstract void setColorFilter(ColorFilter cf);
@Override
public void setColorFilter(ColorFilter colorFilter) {}
picturedravable.java

public abstract void setColorFilter(ColorFilter cf);
@Override
public void setColorFilter(ColorFilter colorFilter) {}

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

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

Drawable.java

public abstract void setColorFilter(ColorFilter cf);
@Override
public void setColorFilter(ColorFilter colorFilter) {}
picturedravable.java

public abstract void setColorFilter(ColorFilter cf);
@Override
public void setColorFilter(ColorFilter colorFilter) {}

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

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

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(),你当然可以使用你喜欢的图像大小,这样位图就不会画得太大,因为那样可能会降低性能。

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

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(),您当然可以使用首选的图像大小,这样位图就不会画得太大,因为这可能会降低性能。

另请参阅我的相关问题和评论中的讨论:另请参阅我的相关问题和评论中的讨论: