Есть ли способ установить Альфа 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 ссылки, которые я нашел об этом, если вы хотите использовать растровые изображения вместо этого: