我正在开发新的Android L预览版,现在正在处理drawable上的着色概念。
我想知道在Android L开发者预览版中是否有关于可绘制着色的新内容。
我读到了this documentation,其中说:
Android L开发者预览版使您可以定义位图或 九个补丁作为alpha蒙版,并使用颜色资源或色调着色 解析为颜色资源的主题属性(例如,
?android:attr/colorPrimary
)。您只能创建一次这些资产 自动着色以匹配您的主题。
但我不明白它与以前的版本有什么不同。我知道如何使用ColorFilter
或PorterDuffColorFilter
在图片上应用色调。任何有关这方面的帮助将不胜感激。
答案 0 :(得分:21)
从L开始,您可以在XML中指定色调。这些可以引用主题属性(如图所示),颜色状态列表,颜色资源或显式十六进制颜色代码。默认情况下,色调模式为SRC_IN,但可以使用android:tintMode属性将其设置为其他模式。
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/my_icon"
android:tint="?android:attr/colorControlNormal" />
默认控件全部使用?android:attr / colorControlNormal用于正常状态(例如未选中的复选框)和?android:attr / colorControlActivated(默认情况下映射到?android:attr / colorAccent)的激活状态(例如,选中复选框)。
您可以在自己的应用程序drawable中使用这些属性来继承默认的框架颜色,或者您可以重新定义它们以更改默认或激活的控件颜色。您还可以引用特定于您的应用的属性(如图所示)。
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/my_icon"
android:tint="?attr/myThemeAttribute" />
答案 1 :(得分:13)
with new Android Support Library 22.1 now more support for tinting possible!
Support V4库是大部分内容的基础 Android支持库,包含许多专注于的类 使向后兼容性更容易。
DrawableCompat现在将可绘制的着色带回API 4:简单地换行 你的Drawable通过DrawableCompat.wrap(Drawable)和setTint(), setTintList()和setTintMode()将起作用:无需创建和 保持单独的drawable只支持多种颜色!
可绘制着色棒棒糖中添加的可绘制着色方法是 对于让您动态着色资产非常有用。 AppCompat有 它自己在v21支持库中实现,我们已经 现在将其提取到支持-v4中的DrawableCompat中,供大家使用 使用。重要的是要知道它是如何工作的。
Drawable drawable = ...;
// Wrap the drawable so that future tinting calls work
// on pre-v21 devices. Always use the returned drawable.
drawable = DrawableCompat.wrap(drawable);
// We can now set a tint
DrawableCompat.setTint(drawable, Color.RED);
// ...or a tint list
DrawableCompat.setTintList(drawable, myColorStateList);
// ...and a different tint mode
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);
要记住的是,在你致电
DrawableCompat.wrap()
之后,你 不能依赖与你给它的结果相同的结果。 相反,您应该使用DrawableCompat.unwrap()
来检索 原来的Drawable。在内部,我们现在将您的Drawable包装在一个特殊的'tint drawable'中 将自动更新您的Drawable的滤色器 指定的色调。这允许我们处理ColorStateList实例。
但我想知道如何使用它xml !!有一个名为
的选项<TintImageView
android:layout_width=""
android:layout_height=""
android:src=""
android:backgroundTint="@color/green"/>
但如果我想更改EditText TextView的drawable left | right图标,我觉得没有办法做到这一点!