web-dev-qa-db-ja.com

Android-状態セレクターアニメーション-押し下げるだけで、押すことはできません

ダウン状態を実現するためのいくつかのボタンの背景として使用している非常に基本的なセレクターがあります。これがxmlです:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:exitFadeDuration="@Android:integer/config_mediumAnimTime">
    <item Android:drawable="@color/home_button_blue_down" Android:state_selected="true" />
    <item Android:drawable="@color/home_button_blue_down" Android:state_pressed="true" />
    <item Android:drawable="@color/home_button_blue" />
</selector>

このセレクターを使用すると、ボタンの状態が変わるたびにフェードアニメーションが発生します。言い換えると、トランジションは、押された状態から押された状態に移行するときと、押された状態から押された状態に戻るときの両方でアニメーション化されます。

さて、私の質問は、これらの状態変化の1つだけがアニメーション化するようにすることは可能ですか?ユーザーがボタンを押すと、アニメーションなしですぐにダウンステート遷移が発生するようにします。ボタンが押されなくなったら、通常の状態がフェードインしている間にダウン状態をフェードアウトさせたいのですが、これはできますか?

11
Reid Conner

セレクターのアニメーション:(私のドローアブルは色でした)

De-Press (Out)
Android:exitFadeDuration="@Android:integer/config_shortAnimTime"
Press (In)
Android:enterFadeDuration="@Android:integer/config_shortAnimTime"

完全な例:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android"
      Android:enterFadeDuration="@Android:integer/config_shortAnimTime"
      Android:exitFadeDuration="@Android:integer/config_shortAnimTime">

<item Android:state_checked="false" Android:drawable="@color/transparent"/>
<item Android:state_checked="true"  Android:drawable="@drawable/circle_blue"/>
</selector>
22
Jack The Ripper

あなたはこのようなことをすることができます:

<?xml version="1.0" encoding="utf-8"?>
<animated-selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:id="@+id/selected"
        Android:state_selected="true"
        Android:drawable="@color/home_button_blue_down"
        />

    <item Android:id="@+id/usual"
        Android:drawable="@Android:color/transparent"
        />

    <transition
        Android:fromId="@+id/usual"
        Android:toId="@+id/selected" >
        <animation-list>
            <!--fill in your animation here-->
        </animation-list>
    </transition>
</animated-selector>

覚えておいてくださいanimated-selectorは、API21以降でのみ使用できます。

詳細については この公式ガイド

11
vedant
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:enterFadeDuration="@Android:integer/config_shortAnimTime"
Android:exitFadeDuration="@Android:integer/config_longAnimTime">
<item Android:state_pressed="true" >
    <shape>
        <gradient
            Android:startColor="#ffffff"
            Android:endColor="#917777"
            Android:angle="270" />
    </shape>
</item>
<item Android:state_pressed="false" >
    <shape>
        <gradient
            Android:startColor="#ffffff"
            Android:endColor="#d2adad"
            Android:angle="270" />
    </shape>
</item>
<item Android:state_checked="true">
    <color Android:color="@color/black"/>
</item>
</selector>
6
maniaq