0

メインビューステートの変更に伴い、内部の1つの画像が変化する複雑なドローアブルを作成しようとしています。私の現在のリソースはそのように見えます

<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

したがって、基本的には、ドローアブルを手動で制御し、状態の変化に反応させたいと考えています。私の知る限りでは、に偽の状態 (押された/フォーカスされた/など) を設定しようとするのは悪いView習慣なので、そうしないことをお勧めします。私は以前にこれをやったことがありませんが、なぜそれができなかったのかわかりません。私の考えは、このボタン/画像の単一LevelListのを作成することです。StateList

を使用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/

于 2013-02-14T21:48:21.213 に答える