【问题标题】:Android - Dynamically Overlay Icon ColorsAndroid - 动态叠加图标颜色
【发布时间】:2017-01-05 23:16:19
【问题描述】:

首先:我是一个真正的编程菜鸟。我相信我能理解代码的作用,因为我曾经把学习一些代码语言作为一种爱好,并且花了几十个小时与 Rainmeter 一起工作。只是这样你被告知我需要一些基本的解释从哪里开始以及如何让任何可能的代码运行。 所以提前感谢您对我的耐心等待。

我想要做的事情实际上应该很简单:我想在我在屏幕和应用程序抽屉上使用的应用程序图标上创建一个叠加层,它根据专辑封面的 AccentColor 动态地为图像着色或着色。这听起来可能很奇怪,但是当您查看此screenshot 或此one 时,您就会明白这一点。 如您所见:我的图标基本上是白线,其他一切都是透明的。如果您想知道:不出所料,它被称为Lines。 现在,我已经阅读了这个论坛上的一堆主题,并浏览了一些网上类似内容的教程,但我无法真正掌握它。所以——尽管我知道这个网站主要由程序员使用——我想我肯定会在这里找到解决方案。我在 OnePlus 3T 上运行 OxygenOS 4.0 (7.0.0 Nougat),解锁并植根。使用 Nova Launcher。

如果您能花时间为我解决问题,我将不胜感激。

编辑:同时我找到了this,但我不确定如何为我使用它?我真的无法理解这一点。我什至不明白我怎么能运行这个?我需要创建一个 XML 文件吗?我怎么能运行它?从我在网上阅读的内容看来,我似乎必须创建一个全新的应用程序才能运行那几行代码?我不能将它们添加到一些已经存在的特定 XML 中吗?

【问题讨论】:

    标签: android icons themes customization android-theme


    【解决方案1】:

    你可以使用imageView.setColorFilter(Color.parseColor("#FF00000"));

    此方法适用于所有 Android 设备,一直到 API 1。

    但是,如果您的目标是 API 21 (Lollipop) 或更高版本,您可以使用 ImageView#setImageTintList,它采用 ColorStateList,它具有额外的优势,您可以根据 pressed、@ 等各种状态控制着色987654328@等。

    用法:imageView.setImageTintList(AppCompatResources.getColorStateList(context, R.color.color_selector));

    color_selector 的样子:

    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item
            android:color="hex_color"
            android:state_pressed=["true" | "false"]
            android:state_focused=["true" | "false"]
            android:state_selected=["true" | "false"]
            android:state_checkable=["true" | "false"]
            android:state_checked=["true" | "false"]
            android:state_enabled=["true" | "false"]
            android:state_window_focused=["true" | "false"] />
    </selector>
    

    【讨论】:

    • 对于大多数答案,最好添加解释以显示代码的工作原理,这有助于其他编程经验较少的人了解代码的作用。
    • @Rolfツ 我同意答案应该尽可能详细,但是我不确定如何进一步详细说明。从我认为的方法名称来看,它非常直观。如果您能让我知道缺少什么,我很乐意编辑我的答案以添加相关详细信息
    • 有更多的方法可以做到这一点,不仅仅是通过为 ImageView 设置颜色过滤器。提问者为什么要使用这种方法?有哪些替代方案?您也可以将他指向文档以供进一步参考。
    • 感谢您的回答 akash,但这是否意味着我必须创建一个应用程序才能做到这一点?我的意思是:我必须在哪里添加代码才能运行它?是否有一些相关的脚本/.xml 文件,我可以在其中添加这些行并让它运行?另外:imageView 是否能够像 KUSTOM LWP 一样实际获取 AlbumArt 的 AccentColor ?因为我认为 KLWP 所做的是将当前 AlbumArt 的副本保存在根目录中,并选择它的“鲜艳”颜色作为元素/可绘制对象的颜色:Screenshot。我该怎么做那个
    • 我想我之前可能误解了你的问题。是的,您需要创建一个应用程序。您可以编写使用Android Studio 的代码。是的,ImageView 可以使用名为 Palette的 API 获取 AlbumArt 的强调色
    【解决方案2】:

    我使用 Android 应用程序KLWP 和 KLWP Icon Plugin 找到了一种解决方法(无需编码)。 我所做的是:

    1. 使用图标插件和您要使用的图标包(在我的例子中为Lines)在您的主屏幕上找到您想要的图标并点击它们以获取公式。
    2. 在 KLWP 中,创建一个位图元素并选择图片选择器的框,然后点击右上角的 计算器 图标以插入公式(实际上只是一个目录图标)到位图元素。 Screenshot
    3. 接下来添加一个 colourize 过滤器并勾选它的公式准备并插入以下公式。它基本上会根据当前专辑封面为位图着色。

      $if(tc(len,bp(lmuted,mi(cover)))=9,bp(lmuted,mi(cover)),bp(lvibrant,mi(cover)))$

    4. 接下来使用位置选项卡将其准确地放置在原始应用程序图标上,现在您有两个选择:

    5. A) 您只需删除原始图标并将 touch 元素添加到位图中,让它们运行相应的应用程序。这样做的缺点是打开应用程序需要更长的时间,并且您无法选择打开动画(它甚至没有设置为系统默认值,所以它只是应用程序被拉起

      B)(推荐)您下载this icon pack 并使用它将您的主屏幕图标更改为那些空位图,以便它们通过您的启动器基本上是不可见的(在 Nova 中非常简单,不知道其他启动器)。这样做的好处是打开速度和动画保持不变,因为变化只是装饰性的。

    Here 是成品外观的一些示例(取决于您屏幕的对比度和颜色设置,差异可能不那么明显)。

    我希望对某人有所帮助。感谢 akash93,他花时间以编程方式向我解释。

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 2011-12-29
      • 2012-10-14
      • 1970-01-01
      相关资源
      最近更新 更多