ImageButton с помощью переходов в Android - PullRequest
6 голосов
/ 25 августа 2010

Я пытаюсь создать прозрачный (без кнопки фон) ImageButton, который имеет пользовательский селектор. У меня есть селектор, работающий против кнопки, но теперь я хочу, чтобы элементы рисования селектора плавно переходили друг в друга. Я видел объект TransitionDrawable, который может быть представлен в XML. Есть ли способ подключить это в мой селектор?

Ниже приведен код макета XML для создания кнопки изображения на экране в левом нижнем углу экрана. В настоящее время он переходит от одного изображения к другому, внезапно игнорируя переход XML.

selector_button.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/transition_normal_to_pressed" /> <!-- pressed -->
    <item android:state_focused="true" android:drawable="@drawable/transition_pressed_to_normal" /> <!-- focused -->
    <item android:drawable="@drawable/menu_normal" /> <!-- default -->
</selector>

transition_normal_to_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/menu_pressed" />
    <item android:drawable="@drawable/menu_normal" />
</transition>

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageButton
        android:id="@+id/btnMenu"
        android:background="@android:color/transparent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/selector_button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true" />
</RelativeLayout>

Ответы [ 3 ]

6 голосов
/ 13 сентября 2010

Вам нужно отбросить селектор и использовать переход непосредственно в качестве рисованной кнопки ImageButtons.Сама анимация должна применяться в коде

ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);

, где drawable.reverseTransition(500) обратит переход из ее текущего состояния.

См. Переходный чертеж , а также TransitionDrawable.html#reverseTransition(int)для дальнейшего объяснения.

4 голосов
/ 19 февраля 2011

Использование переходов в селекторах

ImageButton button = (ImageButton) findViewById(R.id.button);
Drawable d = button.getDrawable.getCurrent(); //or AnyView.getBackground().getCurrent(); for custom background
        if (d instanceof TransitionDrawable) {
            TransitionDrawable t = (TransitionDrawable) d;
            t.startTransition(500);
        }
2 голосов
/ 20 октября 2014

ответы выше слишком сложны, попробуйте это

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="240"
android:enterFadeDuration="120" >
<item android:state_pressed="true"
    android:drawable="@color/pressed_bg" />
<item android:state_pressed="false"
    android:drawable="@android:color/transparent" />
</selector>
...