Кнопка Android с текстом с разными изображениями для включения и нажатия

Я пытаюсь создать кнопку с состоянием, имеющую Text и Image сверху через следующий код:

<Button
android:id="@+id/btnMultiplayer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableTop="@drawable/multiplayer"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:text="Multiplayer"/>

чтобы получить следующее:

Изображение с кнопкой

Тем не менее, я не мог найти способ изменить рисование сверху, когда нажимается изображение.

Я попытался установить android:drawableTop в @drawable/multiplayer_stateful, где @drawable/multiplayer_stateful:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawableTop="@drawable/multiplayer" android:state_enabled="true" android:state_window_focused="false"/>
<item android:drawableTop="@drawable/multiplayer_pressed" android:state_pressed="true"/>

</selector>

но это не работает. (Обратите внимание, что @drawable/multiplayer и @drawable/multiplayer_pressed являются файлами png)

Любые предложения?

Ответ 1

Вы должны использовать android:dither = "true"

Попробуйте это.

<?xml version="1.0" encoding="utf-8"?>
<selector 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:dither="true" >

<item android:drawableTop="@drawable/multiplayer" android:state_enabled="true" android:state_window_focused="false"/>
<item android:drawableTop="@drawable/multiplayer_pressed" android:state_pressed="true"/>

</selector>

Из Android-документов:

Включает или отключает сглаживание растрового изображения, если растровое изображение не имеют ту же конфигурацию пикселей, что и экран (например: ARGB 8888 с экраном RGB 565).

Должно быть логическое значение: "true" или "false".

Это также может быть ссылка на ресурс (в форме "@[package:] type: name" ) или атрибут темы (в форме "? [package:] [type:] name" ), содержащий значение этого типа.

Сглаживание влияет на то, как цвета, которые являются более высокой точностью, чем устройство, отбираются с понижением. Без сглаживания обычно быстрее, но более высокие цвета точности просто усекаются (например, 8888 → 565). Dithering пытается распространять ошибку, присущую этому процессу, для уменьшения визуальных артефактов.

Надеюсь, это поможет!

Ответ 2

включить атрибут dither в вашем селекторе.

Android: дитеринг

Boolean. Включает или отключает сглаживание растрового изображения, если растровое изображение не имеет той же конфигурации пикселей, что и экран (например: растровое изображение ARGB 8888 с экраном RGB 565). Для более подробной информации перейдите по этой ссылке: http://developer.android.com/guide/topics/resources/drawable-resource.html