我希望能够使用相同的drawable来代表两者:
和
作为相同的drawable,并根据一些编程值重新着色drawable,以便最终用户可以重新设置界面主题 .
做这个的最好方式是什么?我已经尝试过(并重复使用了图标)this previous S.O. question但是我无法将变化表示为色调的简单变化,因为它的饱和度和值也不同 .
是否最好将图标存储为我想要更改的区域中的所有白色?还是透明的?还是其他一些纯色?
是否有一些方法可以让你根据red_icon的颜色和blue_icon的颜色之间的差异找出矩阵?
6 回答
所以经过大量的试验和错误,阅读不同的文章,最重要的是,通过API演示(ColorFilters.java - 在com.example.android.apis.graphics中找到)我找到了解决方案 .
对于实体图像,我发现最好使用滤镜PorterDuff.Mode.SRC_ATOP,因为它会将颜色叠加在源图像的顶部,允许您将颜色更改为您要查找的颜色 .
对于更复杂的图像,如上图所示,我发现最好的办法是将整个图像着色为白色(FFFFFF),以便在进行PorterDuff.Mode.MULTIPLY时,最终得到正确的颜色,图像中的所有黑色(000000)都将保持黑色 .
colorfilters.java向您展示如果您在画布上绘制它是如何完成的,但如果您只需要绘制一个drawable颜色,那么这将起作用:
我创建了一个演示活动,使用一些API演示代码在每个颜色过滤器模式之间进行交换,以便针对不同的情况进行尝试,并发现它非常宝贵,所以我想我会在这里发布它 .
如果您想测试它,可以直接从API Demos活动复制另外两个依赖项GraphicsActivity.java和PictureLayout.java .
如果您想在ImageView中对图像应用滤色器,您甚至可以更简单的方式实现它 . 只需在xml中使用ImageView中的属性
android:tint
即可 .例:
你的答案非常好 . 虽然,如果你使用Textview和embed drawable,这个解决方案也是实践:
这是我在查看文档后所做的
并称之为
这在棒棒糖上真的很容易 . 制作一个xml drawable并引用你的png并设置如下的色调:
恕我直言,这比接受的答案更好 . 它源自此StackOverflow线程:Understanding the Use of ColorMatrix and ColorMatrixColorFilter to Modify a Drawable's Hue
用法示例:
将课程复制到您的项目中: