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.


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" полностью видимый

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


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 - непрозрачный.

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 (полностью непрозрачный).


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.