Как я изменяю оттенок ImageButton на фокусе/нажатии

Я имею ImageButton в моем приложении и я должен изменить оттенок изображения, когда кнопка pressed/focused. Я имею ImageButton набор для получения src от XML-файла, который следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- pressed -->
    <item 
        android:state_pressed="true"
        android:tint="@color/black"
        android:drawable="@drawable/search"
        />

    <!-- focused -->
    <item 
        android:state_focused="true"
        android:tint="@color/black"
        android:drawable="@drawable/search"
        />

    <!-- default -->
    <item
        android:tint="@null"
        android:drawable="@drawable/search"
        />

</selector>

Однако оттенок не применяется когда ImageButton нажимается или фокусируется - изображение просто отображается как нормальное. Черный цвет определяется как #000000 как всегда. Какие-либо идеи?

57
задан Sami Eltamawy 12 March 2014 в 15:48
поделиться

2 ответа

Вы можете довольно легко изменить оттенок в коде через:

ImageButton button = (ImageButton) this.findViewById(R.id.button_i_want_to_modify);
button.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint

Надеюсь на это помогает.

JS

93
ответ дан 24 November 2019 в 19:28
поделиться

Поскольку вы определили селектор как src для ImageButton, Android AFAIK просто возьмет drawable, потому что он соответствует типу src. Так что оттенок не будет использоваться.

Тем не менее, у меня была аналогичная проблема: я также пытался использовать селектор, подобный вашему, но для значения android: tint ImageButton вместо android: src. Конечно, я пропустил значения оттенка, которые у вас есть в вашем селекторе. Это также решит вашу проблему, потому что вы хотите использовать один и тот же drawable для всех состояний. Любопытно, что каждый раз я получаю NumberFormatException, в котором говорится, что система не смогла проанализировать res / color / tint_selector.xml (который действительно является моим селектором) как целое число. Чтобы быть конкретным, мой код выглядит так:

Это мой селектор, сохраненный в /res/color/tint_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_pressed="true"
         android:color="#D3D3D3"/> <!-- pressed -->
   <item android:color="#ff000000"/> <!-- default -->
</selector>

, и это соответствующий ImageButton:

<ImageButton android:id="@+id/program_help"
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content"
     android:src="@drawable/symbol"
     android:tint="@color/tint_selector">
</ImageButton>

Возможно, это вам немного поможет, хотя в настоящее время не работает.

-3
ответ дан 24 November 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: