需要为图像视图设置色调...我使用以下方式:
imageView.setColorFilter(R.color.blue,android.graphics.PorterDuff.Mode.MULTIPLY);
Run Code Online (Sandbox Code Playgroud)
但它没有改变......
我想用颜色参考着色图像.结果应该类似于Photoshop中的"乘法"混合模式,其中白色将替换为色调:

我会不断改变颜色值.
跟进:我会把代码放在我的ImageView的drawRect:方法中,对吗?
与往常一样,代码片段将极大地帮助我理解,而不是链接.
更新:使用Ramin建议的代码对UIImageView进行子类化.
我把它放在viewDidLoad中:我的视图控制器:
[self.lena setImage:[UIImage imageNamed:kImageName]];
[self.lena setOverlayColor:[UIColor blueColor]];
[super viewDidLoad];
Run Code Online (Sandbox Code Playgroud)
我看到了图像,但没有被染色.我还尝试加载其他图像,在IB中设置图像,并在我的视图控制器中调用setNeedsDisplay:
更新:drawRect:未被调用.
最后更新:我找到了一个正确设置了imageView的旧项目,所以我可以测试Ramin的代码,它就像一个魅力!
最后的最后更新:
对于那些刚学习Core Graphics的人来说,这是最简单的事情.
在您的子类UIView中:
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColor(context, CGColorGetComponents([UIColor colorWithRed:0.5 green:0.5 blue:0 alpha:1].CGColor)); // don't make color too saturated
CGContextFillRect(context, rect); // draw base
[[UIImage imageNamed:@"someImage.png"] drawInRect: rect blendMode:kCGBlendModeOverlay alpha:1.0]; // draw image
}
Run Code Online (Sandbox Code Playgroud) 当我使用AppCompat库中的drawables 作为我的Toolbar菜单项时,着色按预期工作.像这样:
<item
android:id="@+id/action_clear"
android:icon="@drawable/abc_ic_clear_mtrl_alpha" <-- from AppCompat
android:title="@string/clear" />
Run Code Online (Sandbox Code Playgroud)
但是如果我使用自己的drawables,或者实际上甚至将drawables从AppCompat库中复制到我自己的项目中,它根本就不会染色.
<item
android:id="@+id/action_clear"
android:icon="@drawable/abc_ic_clear_mtrl_alpha_copy" <-- copy from AppCompat
android:title="@string/clear" />
Run Code Online (Sandbox Code Playgroud)
是否有一些特殊的魔法AppCompat Toolbar,只有那个图书馆的色彩抽奖?有没有办法让我的自己的drawables工作?
在API Level 19设备上使用compileSdkVersion = 21和运行此操作targetSdkVersion = 21,并使用其中的所有内容AppCompat
abc_ic_clear_mtrl_alpha_copy是abc_ic_clear_mtrl_alphapng 的精确副本AppCompat
编辑:
着色基于我android:textColorPrimary在主题中设定的值.
例如,<item name="android:textColorPrimary">#00FF00</item>可以给我一个绿色的色调的颜色.
截图
着色使用AppCompat中的drawable按预期工作

着色不适用于从AppCompat复制的drawable

我的活动中有一个Button,我希望它有我主题的强调色.而不是像我们必须做的那样制作我自己的可绘制的Lollipop,我自然会想要使用新backgroundTint属性.
<Button
android:id="@+id/btnAddCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="@color/accent"
android:text="@string/addressInfo_edit_addCode" />
Run Code Online (Sandbox Code Playgroud)
不幸的是它没有效果,按钮保持灰色.
我尝试了不同的值backgroundTintMode,但没有改变任何东西.
我也尝试在我的Activity中以编程方式进行,它没有改变任何东西.
addCodeView.findViewById(R.id.btnAddCode).setBackgroundTintList(
getResources().getColorStateList(R.color.accent));
Run Code Online (Sandbox Code Playgroud)
为什么我的色彩被忽略了?
编辑:只是为了澄清,我确实在Lollipop设备上进行测试.其他小部件(例如EditText)正确并自动着色.
我知道可以通过在其上绘制CGContextFillRect并设置混合模式来着色矩形图像.但是,我无法弄清楚如何对透明图像(如图标)进行色调处理.它必须是可能的,因为SDK本身就是在tab-bar上自己做的.有人能提供一个片段吗?
更新:
自从我最初提出这个问题以来,已经给出了很多很好的建议.请务必仔细阅读所有答案,找出最适合您的方法.
更新(2015年4月30日):
使用iOS 7.0,我现在可以执行以下操作,这将满足我原始问题的需要.但如果您有更复杂的案例,请查看所有答案.
UIImage *iconImage = [[UIImage imageNamed:@"myImageName"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
UIImageView *icon = [[UIImageView alloc] initWithImage:iconImage];
icon.tintColor = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud) 我有一个ImageButton在我的应用程序,我需要在按钮时更改图像的色调pressed/focused.我有一个从XML文件ImageButton获取它的集合,src如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- pressed -->
<item
android:state_pressed="true"
android:tint="@color/black"
android:drawable="@drawable/search"
/>
<!-- focused -->
<item
android:state_focused="true"
android:tint="@color/black"
android:drawable="@drawable/search"
/>
<!-- default -->
<item
android:tint="@null"
android:drawable="@drawable/search"
/>
</selector>
Run Code Online (Sandbox Code Playgroud)
但是,ImageButton按下或聚焦时不会应用色调- 图像只显示正常.黑色一直定义为黑色#000000.有任何想法吗?
我试图在Android API级别21之前对图像进行着色.我已成功使用以下项目着色项目:
<android:tint="@color/red"/>
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法弄清楚如何通过ImageView上的代码执行此操作:
Drawable iconDrawable = this.mContext.getResources().getDrawable(R.drawable.somedrawable);
DrawableCompat.setTint(iconDrawable, this.mContext.getResources().getColor(R.color.red));
imageView.setImageDrawable(iconDrawable);
Run Code Online (Sandbox Code Playgroud)
我已经尝试过设置TintMode,但这似乎没有什么不同.我是否错误地使用了v4兼容类DrawableCompat?
所以我已经看到了很多用CSS来改变图像的方法,包括带圆角的图像,但我的问题不同了.
假设我有一个看起来像小狗的.png图像(只是用它,我没有任何好的例子),当我把它放在我的页面上时,我给它的尺寸为100 x 100.
但是我不能只在它上面覆盖一些东西,或者整个图像着色,因为它会使狗的背景也被染色,看起来很难看.
是否可以使用CSS为任意形状的图像着色?
(我假设你理解我的观点,没有必要使用无用的代码)
谢谢!
我正在使用新的TextInputLayout来包装EditText.当我确定某个字段有错误时,我会执行以下操作:
Drawable drawable = DrawableCompat.wrap(getEditText().getBackground());
DrawableCompat.setTintList(drawable, ColorStateList.valueOf(Color.RED));
Run Code Online (Sandbox Code Playgroud)
这适用于5.0并将下划线变为红色,但在4.4或4.1测试设备上不执行任何操作.我在这里错过了什么?看起来如此简单,根据谷歌"正常工作"...非常确定我也有最新版本:
编译'com.android.support:design:22.2.0'
FWIW,如果我使用setColorFilter而不是setTint,那么它可以在所有平台上运行,但是我有问题就会消失,一旦焦点设置/左/等等就不会回来......我更愿意这样做色调(如果有人在寻找额外的信用lol,我真的更喜欢将色调应用于焦点和非焦点状态)
谢谢!
我有一个UIButton云,透明的黑色和白色.png文件的自定义,没有向下状态,只有一个图像.当用手敲击并握住手指时,它会变成深灰色.我试图把那个深灰色改成一点不那么压抑的东西.该按钮在视图中处于打开状态,而不是在选项卡栏,工具栏或导航控制器中.
我已经尝试过设置tintColor(文档有用地通知我只适用于'某些'类型的按钮,这些按钮没有任何指示).
我也尝试过改变我在Interface Builder中可以找到的与高亮颜色,默认状态等相关的所有内容.没有什么能够产生任何影响.
我甚至尝试将按钮自己的图像设置为其UIControlStateHighlighted状态,但即使这样,当我用手指按住它时也会出现深灰色叠加.
我怎样才能改变那种颜色?我已经在SO上查看了许多其他问题,并且无法找到适合我的解决方案.任何帮助将不胜感激!
编辑:我使用一个类别解决了问题,该类别UIImage添加了一个方法,用于CoreGraphics将颜色应用于提供UIImage.然后我将THAT图像设置为亮点,一切都很好.看起来有很多改变颜色的苹果应该让我们改变一下,但是我可以改变.