Android и установка альфа-канала для (изображение) альфа-канал

Ответы:

195

Нет, посмотрите, как отсутствует раздел «Связанные атрибуты XML» в документации ImageView.setAlpha (int) . Альтернативой является использование View.setAlpha (float), чьим XML-аналогом является android:alpha. Он принимает диапазон от 0,0 до 1,0 вместо 0 до 255. Используйте его, например, как

<ImageView android:alpha="0.4">

Однако последний доступен только с уровня API 11.

sschuberth
источник
7
Даже если я просто повторюсь здесь: ImageView.setAlpha(int)занимает некоторое intвремя android:alpha, принимает плавающее значение, поэтому, строго говоря, последний не является точным XML-аналогом первого, но он является аналогом View.setAlpha(float). И, как уже упоминалось здесь несколько раз, android:alpha/ View.setAlpha(float)доступны только с уровня API 11.
sschuberth
разница в том, что допустимый диапазон 0-1 для float и 0-255 для int.
ataulm 09
232

Это проще, чем другой ответ. Существует значение xml, alphaкоторое принимает двойные значения.

android:alpha="0.0" это невидимо

android:alpha="0.5" смотреть сквозь

android:alpha="1.0" полностью видимый

Вот как это работает.

jfcogato
источник
15
Есть setAlpha(float)и android:alphaтолько с API 11 (Android 3.0). В предыдущих версиях API 11 для установки альфа-канала изображения необходимо использовать код. Как sschuberth уже сказал в ансере выше.
Salw
@ Антонио Почему? Этот ответ не добавляет никакой информации к моей и, наоборот, менее полон.
sschuberth
@sschuberth, ваш ответ полностью верен, но из-за отсутствия примера этот ответ может привлечь больше внимания, чем ваш. Хотя ваш ответ содержит больше информации, этот ответ предлагает решение, более близкое к тому, что мне действительно нужно. Пожалуйста, добавьте несколько примеров, чтобы использовать то, что вы объяснили, это абсолютно поможет!
Антонио
@Antonio Готово. Я сделал свой ответ сейчас супер-пупер-сверх-многословный ;-)
sschuberth
53

Я не уверен насчет XML, но вы можете сделать это с помощью кода следующим образом.

ImageView myImageView = new ImageView(this);
myImageView.setAlpha(xxx);

В pre-API 11:

  • диапазон от 0 до 255 (включительно), 0 - прозрачный, 255 - непрозрачный.

В API 11+:

  • диапазон от 0f до 1f (включительно), 0f - прозрачный, а 1f - непрозрачный.
Umesh
источник
2
Ага, я знаю. (Я надеялся, что это подразумевается в вопросе.) Одна из возможностей XML - убрать часть этого кода. Для меня не имеет смысла, почему alphaнет аналога XML-атрибута, когда есть разные размеры, позиции.
SK9
интересно: почему он устарел? это потому, что теперь у них есть параметр с плавающей запятой?
разработчик Android
Да, вы можете использовать imageView.setAlpha (1.0f), но требуется уровень API 11.
Тони Серальва
12

Может быть полезной альтернативой однотонному фону:

Поместите LinearLayout поверх ImageView и используйте LinearLayout в качестве фильтра непрозрачности. В следующем небольшом примере с черным фоном:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF000000" >

<RelativeLayout
    android:id="@+id/relativeLayout2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon_stop_big" />

    <LinearLayout
        android:id="@+id/opacityFilter"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#CC000000"
        android:orientation="vertical" >
    </LinearLayout>
</RelativeLayout>

Варьируйте Android: фон атрибут LinearLayout между # 00000000 (полностью прозрачный) и # FF000000 (полностью непрозрачный).

marnaish
источник
1
Не совсем лучший способ решить проблему с альфа-изображением, особенно на телефоне.
Пракаш Надар
Это отлично работает, когда вы просто хотите сделать фон прозрачным, но НЕ его дочерние элементы. Использование альфа-канала в родительском контейнере также делает прозрачными все его дочерние элементы
нони
8

Теперь есть альтернатива XML:

        <ImageView
        android:id="@+id/example"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/example"
        android:alpha="0.7" />

Это: android: alpha = "0.7"

Со значением от 0 (прозрачный) до 1 (непрозрачный).

Колдун
источник
4

используйте android: alpha = 0.5, чтобы добиться непрозрачности 50% и переключить значки материалов Android с черного на серый.

Сачиин Гупта
источник
4

setAlpha(int)устарело с API 16:Android 4.1

Пожалуйста, используйте setImageAlpha(int)вместо

Ален Ли
источник
3

Используйте эту форму для древней версии Android.

ImageView myImageView;
myImageView = (ImageView) findViewById(R.id.img);

AlphaAnimation alpha = new AlphaAnimation(0.5F, 0.5F);
alpha.setDuration(0); 
alpha.setFillAfter(true); 
myImageView.startAnimation(alpha);
Рафаэль
источник
0

Альфа-канал может быть установлен вместе с цветом, используя следующий шестнадцатеричный формат #ARGB или #AARRGGBB. См. Http://developer.android.com/guide/topics/resources/color-list-resource.html.

Грант
источник
Я хочу установить альфа-канал изображения с помощью атрибута XML. Это помогает?
SK9
Я использую это, чтобы смешать макеты поверх макета с фоновым изображением, наверняка вы бы установили альфа-канал изображения в самом изображении?
Грант
Что значит «в самом изображении»? В XML? Возможно, это недосмотр, но нет атрибута альфа-XML.
SK9,
Я имею в виду, что когда вы создаете изображение, вы должны добавить слой прозрачности и установить непрозрачность вашего изображения на 50 или любое другое значение, которое вам нужно.
Грант
ОЧЕНЬ удивлен, что android: tint не действует. Он допускает альфа-значение ... но не влияет на белое изображение: - (((((
Someone Somewhere