0

我正在尝试创建复杂的可绘制对象,其中一张图片随着主视图状态的变化而变化。我当前的资源看起来像这样

<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item >
        <layer-list>
            <item>
                <selector>
                    <item android:state_activated="true" android:drawable="@drawable/img_activated_icon" />
                    <item android:drawable="@drawable/img_default_icon" />
                </selector>
...

接下来,我将它用作 ImageView 的 src。整个可绘制对象渲染得很好,但选择器忽略了 ImageView 上的 setActive() 调用并始终显示“默认”图标。

我究竟做错了什么?

UPD

所以,这里是所需的可绘制层次结构:

layer-list
  transition
    background1
    background2
  image

在这种情况下,我无法激活过渡动画,因此我将过渡移至上层:

transition
  layer-list
    background1
    image   
  layer-list
    background2
    image   (the same image!)

那么,如何实现第一个布局并能够控制过渡和更改图像的来源?

4

1 回答 1

1

所以基本上你希望能够手动控制可绘制对象,并让它们对状态变化做出反应。据我所知,尝试在 a 上设置假状态(按下/聚焦/等)是不好的View做法,因此我建议您不要尝试这样做。我以前没有这样做过,但我不明白为什么不能这样做。LevelList我的想法是StateList为此按钮/图像创建一个s 。

LevelList将使您可以控制按钮/图像具有的“主题”,具体取决于您将其设置为 using 的级别setLevel()。每个级别都将指向一个“主题” StateList,该“主题”对于所有不同的状态(按下/聚焦/等)都有不同的“主题”可绘制对象。

http://developer.android.com/guide/topics/resources/drawable-resource.html#LevelList http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

<level-list xmlns:android="http://schemas.android.com/apk/res/android">   
    <item android:maxLevel="0" android:drawable="@drawable/state_list_icon_default" />   
    <item android:maxLevel="1" android:drawable="@drawable/state_list_icon_another_style_1" />   
    <item android:maxLevel="2" android:drawable="@drawable/state_list_icon_another_style_2" />    
</level-list>

state_list_icon_default将拥有默认的可绘制对象,如下所示(取决于您想要绘制可绘制对象的状态):

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/img_default_icon_pressed" />
    <item android:state_enabled="true" android:state_focused="true" android:drawable="@drawable/img_default_icon_focused" /> 
    <item android:state_enabled="false" android:state_focused="true" android:drawable="@drawable/img_default_icon_disabled_focused" />
    <item android:state_enabled="false" android:drawable="@drawable/img_default_icon_disabled" />
    <item android:drawable="@drawable/img_default_icon"/> 
</selector>

这里有一些教程可以看到更深入的实现。

http://iserveandroid.blogspot.com/2010/10/progress-bar-implementation-using-level.html http://sermojohn.wordpress.com/2012/02/04/using-a-state-list-drawable -作为按钮背景图像/

于 2013-02-14T21:48:21.213 回答