代码之家  ›  专栏  ›  技术社区  ›  BinaryGuy

与上一版本相比,Android L Developer Preview中的可绘制着色有什么新功能?

  •  20
  • BinaryGuy  · 技术社区  · 10 年前

    我正在开发新的Android L预览版,现在正在处理可绘制的着色概念。

    我想知道Android L开发者预览版中是否有关于可绘制着色的新内容。

    我读过这个 this documentation 上面写着:

    Android L Developer Preview允许您定义位图或 九个面片作为alpha遮罩,并使用颜色资源或 解析为颜色资源的主题属性(例如, ?android:attr/colorPrimary ). 您只能创建这些资产一次,并且 自动为它们上色以匹配主题。

    但我不明白它和以前的版本有何不同。我知道如何使用 ColorFilter PorterDuffColorFilter 在图像上应用色调。如有任何帮助,我们将不胜感激。

    2 回复  |  直到 10 年前
        1
  •  21
  •   alanv    10 年前

    从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:aattr/colorAccent)的激活状态(例如,选中复选框)。

    您可以在自己的应用程序绘图中使用这些属性来继承默认框架颜色,也可以重新定义它们以更改默认或激活的控件颜色。您还可以引用特定于应用程序的属性(如图所示)。

    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/my_icon"
        android:tint="?attr/myThemeAttribute" />
    
        2
  •  13
  •   Maciej Ciemięga Tim    9 年前

    with new Android Support Library 22.1 now more support for tinting possible!

    Support V4库是 Android支持库,包含许多重点关注的类 使向后兼容性更加容易。

    DrawableCompat现在将可拉伸着色带回API 4:简单包装 通过DrawableCompat.wrap(Drawable)和setTint(), setTintList()和setTintMode()将只起作用:无需创建和 保持单独的抽屉,只支持多种颜色!

    Info from Chris Banes blog:

    可拉伸着色棒棒糖中添加的可拉伸着色方法有 对于让您动态着色资产非常有用。AppCompat拥有 它自己在v21支持库和weve中的内置实现 现在将其提取到support-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 将自动从 指定的色调。这允许我们处理ColorStateList实例。

    但我想知道如何使用它xml!!有一个选项叫做

    <TintImageView
    android:layout_width=""
    android:layout_height="" 
    android:src=""
    android:backgroundTint="@color/green"/>
    

    但如果我想更改EditText TextView的可绘制左|右图标,我觉得没有办法做到这一点!