Есть ли способ установить Альфа drawable с помощью XML?
легко, как и сам . Я хочу сделать Альфа-кнопку , которая будет иметь выбранный drawable таким образом:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Play/Pause -->
<item android:state_selected="false" android:drawable="@drawable/item" />
<item android:state_selected="true" android:drawable="@drawable/item" />
</selector>
Я хочу сделать что-то вроде этого:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Play/Pause -->
<item android:alpha="125" android:state_selected="false" android:drawable="@drawable/item" />
<item android:alpha="255" android:state_selected="true" android:drawable="@drawable/item" />
</selector>
Спасибо за все .
7 ответов
Я не думаю, что есть способ сделать это. Существует атрибут android:alpha
, но это относится к представлениям, а не к чертежам. Он доступен только с уровня API 11.
прошло некоторое время после операции, но лично нашел решение, которое работало намного лучше для меня, чем предлагаемые ответы. Создание BitmapDrawable делает легко можно установить Альфа:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/your_drawble"
android:alpha="77">
</bitmap>
Alpha может быть любым значением от 0 до 255. Обратите внимание, что это своего рода инверсия значения цвета HEX alpha, так как, например, 70% alpha будет B3 в HEX и 77 в BitmapDrawable.
Я достиг того же, используя drawable
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#5000ddff" />
</shape>
здесь используется Альфа 50, которая устанавливает уровень непрозрачности. Надеюсь, это поможет
Я искал то же самое. Несмотря на то, что это опубликовано более четырех лет назад, это верхний пост при поиске проблемы, поэтому я отвечу здесь.
Это мое решение
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false">
<bitmap android:alpha="@integer/not_pressed_alpha" android:src="@drawable/item"/>
</item>
<item android:state_pressed="true" android:drawable="@drawable/item" />
</selector>
для тех, кто имеет ту же проблему, что и OP, AppCompat теперь позволяет установить параметр "alpha", как он хотел в своем целевом коде:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Play/Pause -->
<item android:alpha="125" android:state_selected="false" android:drawable="@drawable/item" />
<item android:alpha="255" android:state_selected="true" android:drawable="@drawable/item" />
</selector>
Подробнее здесь.
моя цель состояла в том, чтобы сделать кнопку выбранной и нажатой в разных Альфа - состояниях, но используя тот же ресурс (png) и затрагивая как можно меньше файлов.
мое решение похоже на изменение Альфы в BitmapDrawable - но оно делает это из селектора, поэтому влияет только на один файл.
используйте функцию оттенка растрового изображения, помните, что оттенок будет окрашивать существующие пиксели, поэтому используйте белый цвет. Например, #80FFFFFF-сохранить цвет как оригинальный, но уменьшить альфу на 50% Это также может быть использовано для изменения цвета значка при нажатии.
Это мой XML-файл катры:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<bitmap
android:src="@drawable/ic_camera"
android:tint="#80FFFFFF">
</bitmap>
</item>
<item android:state_pressed="true">
<bitmap
android:src="@drawable/ic_camera"
android:tint="#80FFFFFF">
</bitmap>
</item>
<item>
<bitmap
android:src="@drawable/ic_camera">
</bitmap>
</item>
</selector>
Я думаю, вы можете создать свой собственный drawable, который может принять этот аргумент в качестве параметра. но я никогда не делал ничего подобного.
проверьте эту ссылку:
Как установить Альфа-значение для drawable в StateListDrawable?
Если это невозможно, вы всегда можете сделать это в коде...
вот 2 ссылки, которые я нашел об этом, если вы хотите использовать растровые изображения вместо этого: