【问题标题】:Would it be possible to let the user customize the color of a .9 drawable?是否可以让用户自定义 .9 可绘制对象的颜色?
【发布时间】:2011-08-10 12:57:35
【问题描述】:

和标题说的差不多。我希望用户可以选择自定义我拥有的 9 个可绘制对象的边框。是这样的可能还是我需要使用不同的方法?现在,我认为它不会起作用,它会弄乱 9 补丁。

【问题讨论】:

  • 为什么需要这个选择?用户(而非开发人员)如何与您的应用程序交互?用户是否将一些 .9 图像加载到您的应用程序中?
  • 我不需要它,我想要它,只是为了清楚。这个想法是让用户能够在我的应用程序的弹出框中更改边框的颜色。然而,弹出框 drawable 必须是九个补丁。

标签: android customization drawable


【解决方案1】:

你能贴一张你的 9-patch 的图片吗?可以将其中的一部分提取到另一种类型的可绘制对象中,然后使用图层列表将可自定义的部分(使用用户定义的颜色绘制)分层到固定部分下。

[更新]根据您发布的图片,我会放弃层列表的想法,但我们仍然可以解决一些问题。想法是从 9-patch 中完全移除彩色边框和内部深色背景(用阴影颜色和不透明度填充该区域)。然后将 3 个布局相互嵌套。第一个将使用 9-patch 作为背景。第二种将使用用户定义的颜色作为背景。第三个将使用您的面板颜色作为背景。 9-patch 将提供适当的边距来定位第二个(用户颜色)布局,然后您只需向第二个面板添加一个 layout_margin 属性以将最里面的布局定位在几个 dps 内。

<LinearLayout
    android:id="@+id/PanelOuter"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/shadow_nine_patch">
    <LinearLayout
        android:id="@+id/PanelUserBorder"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/custom_border_width"
        android:background="@color/dialog_border_color_default">
        <LinearLayout
            android:id="@+id/PanelContent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/custom_dialog_content_margin"
            android:background="@color/dialog_inner_color">
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

当然,您需要负责在代码中找到 PanelUserBorder 视图并使用正确的用户定义颜色调用 setBackgroundColor()

【讨论】:

  • Yarb,这是我的 Dropbox 链接。我想改变什么应该很明显。 dl.dropbox.com/u/2301775/gingerbread.png顺便说一句,我喜欢你的想法。
  • 根据您的评论编辑了我的答案。
  • 是的,我将继续并称之为解决。我现在有了一个更好的主意。
【解决方案2】:

也许您可以通过在按钮上方放置一个 50% 透明视图来对其进行着色。

想了想,也许你可以通过位图变换颜色:

How to change Bitmap image color in android?

【讨论】:

  • 嗯。是的,我最终可能不得不做一些像那样有点棘手的事情。不错的主意。
  • 我认为最好的方法是自己制作 1 几个不同的 9 个补丁,然后让用户选择。
  • 哈,是的。这实际上是我已经做过的。我的颜色有点用完了,在这种情况下我想提供一个可定制的颜色。
猜你喜欢
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 2022-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多