Изменить отступ на Android ImagePadding при нажатии

У меня есть Android ImageButton, и я могу изменить цвет фона, оттенок и т. Д. Для разных состояний.

Я хочу «небольшое движение» изображения, когда пользователь нажимает кнопку.

Итак, моя идея состояла в том, чтобы добавить другое дополнение для нажатого состояния, но я не знаю, как это сделать (в xml).

Есть ли способ добиться этого. Я знаю, что одним из способов было бы использовать разные изображения для состояний с прозрачными изображениями, где «значок» находится по-другому.

Но я надеюсь, что смогу добиться этого без необходимости использования нескольких изображений, просто изменив отступы.


person ManniAT    schedule 12.09.2018    source источник


Ответы (1)


Попробуй это. Это не совсем изменит ваш отступ, но немного увеличит изображение, а затем обратно (или изменит его на 0,9 и 1,0, чтобы уменьшить его и обратно). Я думаю, это то, что вы ищете.

Используйте селектор в ресурсах аниматора:

<!-- res/animator/image_button_pressed.xml -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true">
        <set>
            <objectAnimator
                android:duration="100"
                android:propertyName="scaleX"
                android:valueTo="1.1"
                android:valueType="floatType"/>
             <objectAnimator
                android:duration="100"
                android:propertyName="scaleY"
                android:valueTo="1.1"
                android:valueType="floatType"/>
        </set>
    </item>
    <item android:state_focused="false">
        <set>
            <objectAnimator
                android:duration="100"
                android:propertyName="scaleX"
                android:valueTo="1.0"
                android:valueType="floatType"/>
             <objectAnimator
                android:duration="100"
                android:propertyName="scaleY"
                android:valueTo="1.0"
                android:valueType="floatType"/>
        </set>
    </item>
</selector>

Вы можете иметь 0 длительности для перехода прямо к значению или указать длительность.

Затем, чтобы использовать его, установите android:stateListAnimator в своем представлении:

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/your_drawable"
    android:stateListAnimator="@animator/image_button_pressed"/>

Вы также можете добавить еще один objectAnimator в набор, чтобы изменить перевод Z, чтобы он поднимался при нажатии (в соответствии с рекомендациями по материалам).

person rexar5    schedule 12.09.2018
comment
Я пробовал это - но это не работает - я думаю, вы не можете анимировать заполнение таким образом, потому что для заполнения нет установщика. Я попробовал ваш подход и использовал translationX - и ДА, пока это работает. НО - при этом перемещается вся кнопка, а не только изображение в ней. - person ManniAT; 13.09.2018
comment
О... Бле. Мой плохой, я поленился с тестированием этого. Вероятно, вы можете анимировать как масштаб X, так и масштаб Y. немного подправить цифры. я обновлю ответ - person rexar5; 13.09.2018
comment
О, и я думаю, что если вы хотите переместить только изображение, вам может понадобиться создать собственное представление. ImageButton на самом деле не предоставляет информацию для перемещения изображения внутри кнопки. Если вы приложите скриншот своей кнопки, я смогу лучше понять, как создать собственное представление для того, что вы ищете. Всякий раз, когда я использую кнопку изображения, на самом деле нет разницы между изображением и кнопкой в ​​целом. - person rexar5; 13.09.2018
comment
padding перемещает изображение внутри кнопки, это работает - проблема в том, что я не нашел способа (кроме кода) изменить отступ во время выполнения. - person ManniAT; 14.09.2018
comment
Вы можете попробовать что-то вроде этого: stackoverflow.com/questions/ 12247723/ Однако это может оказаться сложнее, чем просто сделать это в коде. Можете ли вы добавить скриншот, описывающий, что вы пытаетесь сделать? - person rexar5; 15.09.2018