Android:如何使用嵌套可绘制资源的视图状态?

时间:2013-02-14 21:06:15

标签: android android-resources

我正在尝试创建复杂的drawable,其中一张图片内部更改主视图状态更改。我当前的资源看起来像那样

<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。 整个drawable呈现正常,但选择器忽略了ImageView上的setActive()调用,并始终显示“默认”图标。

我做错了什么?

UPD

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

layer-list
  transition
    background1
    background2
  image

在这种情况下,我无法激活过渡动画,所以我将过渡移到了上一级:

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

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

1 个答案:

答案 0 :(得分:1)

所以基本上你希望能够手动控制drawables,并让它们对状态变化做出反应。据我所知,尝试在View上设置假状态(按下/聚焦/等)是糟糕练习,所以我建议你不要尝试这样做。我之前没有这样做,但我不明白为什么不能这样做。我的想法是为此按钮/图片创建一个LevelList StateList个。{/ p>

LevelList可让您控制按钮/图片所具有的“主题”,具体取决于您使用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-as-a-button-background-image/