0

这就是我需要的:

显示您按下它的选择器。但是这个选择器也处理长按颜色转换。我看了很多,发现了这个。这基本上是我需要的,但这仅适用于图像,而不适用于颜色。这是我现在的代码:

default_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_window_focused="false" android:drawable="@android:color/transparent" />

    <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
    <item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@android:color/transparent" />
    <item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@android:color/transparent" />
    <item android:state_focused="true"                                android:state_pressed="true" android:drawable="@drawable/default_selector_transition" />
    <item android:state_focused="false"                               android:state_pressed="true" android:drawable="@drawable/default_selector_transition" />
    <item android:state_focused="true"                                                             android:drawable="@color/selection_grey" />
    <item android:state_activated="true" android:drawable="@color/selection_grey"/>
    <item android:drawable="@android:color/transparent" />
</selector>

default_selector_transition.xml:

<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/list_pressed_default"  />
    <item android:drawable="@drawable/list_longpressed_default"  />
</transition>

default_selector_transition.xml 中的可绘制对象现在有 9 个补丁。我想知道是否可以将其更改为颜色。

我尝试了什么:

  • 只需在其中放置颜色而不是可绘制对象
  • 在其中放置可绘制的颜色(<drawable name="selection_grey_drawable">#BDBDBD</drawable>

希望大家给我一个解决方案!

4

1 回答 1

2

放置颜色而不是可绘制对象对您不起作用?

如果没有,您仍然可以尝试在里面创建一个单独的drawable文件shapes。例如像这样:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/your_color_1" />
</shape>

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/your_color_2" />
</shape>

然后将这些文件链接到您的default_selector_transition.xml

<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/first_shape"  />
    <item android:drawable="@drawable/second_shape"  />
</transition>

编辑:

那么主要问题是你的代码根本不适合我,即使有9个补丁......

Android 开发者文档说:

<item> 定义一个可绘制对象以用作可绘制过渡的一部分。必须是元素的子<transition>元素。接受子<bitmap> 元素。

因此,如果您的代码适合您,您仍然可以尝试欺骗drawable使用bitmap正在创建的带有颜色的子项?像这样的东西应该工作:

<bitmap
    android:src="@drawable/dummy_bitmap"
    android:tint="@color/your_color"
    android:tileMode="repeat"/>

哪里dummy_bitmap只是一些可“填充”src此位图中所需字段的可绘制对象。

也许是这样的:

<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap
            android:src="@drawable/NOT_transparent_dummy_bitmap"
            android:tint="@color/your_color_1"
            android:tileMode="repeat"/>
    </item>
    <item>
        <bitmap
            android:src="@drawable/NOT_transparent_dummy_bitmap"
            android:tint="@color/your_color_2"
            android:tileMode="repeat"/>
    </item>
</transition>
于 2015-01-19T12:42:06.830 回答