Разница между setAlpha и setImageAlpha
ImageView имеет два метода, связанных с методами: setAlpha и setImageAlpha. Первый из них доступен с уровня API 1, но с 16-го уровня он устарел. Последний доступен с уровня 16. Также существует еще один метод setAlpha, из класса View, и это введено в уровне API 11.
Является ли разница между ImageView # setAlpha и ImageView # setImageAlpha только в названии? Есть ли разница в поведении? Какая связь между View # setAlpha и ImageView # setAlpha?
Ответы
Ответ 1
ImageView.setAlpha(int)
был переименован в ImageView.setImageAlpha(int)
, чтобы избежать путаницы с новым методом View.setAlpha(float)
, представленным на уровне API 11.
View.setAlpha(float)
- общий метод, доступный для всех View
s, включая ImageView
. Он применяет указанную непрозрачность ко всему виду. Чтобы достичь этого, по умолчанию система создает временный буфер (аппаратный уровень), где представление рисуется как обычно, затем буфер рисуется на экране с указанным значением альфа. Это двухпроходный механизм, который требует первоначального выделения буфера, поэтому он несколько медленнее. Посмотрите это видео для получения дополнительной информации и о том, как изменить поведение по умолчанию: Скрытая стоимость прозрачности.
Важно отметить, что ImageView
включает по умолчанию оптимизацию, которая позволит избежать выделения этого буфера, если у него нет фона, поэтому на практике при вызове ImageView.setAlpha(float)
не будет никакого штрафа за производительность, если ImageView
не имеет фона.
ImageView.setImageAlpha(int)
(и ImageView.setAlpha(int)
) - это методы, соответствующие ImageView
. Они управляют альфа-значением, которое используется для рисования содержимого изображения (растрового изображения или другого) непосредственно на экране без промежуточного прохода, поэтому это предпочтительный метод для применения прозрачности к изображению, отображаемому ImageView
. Конечно, если вы установите для фона ImageView
фоновый чертеж, который также должен быть полупрозрачным, этот метод не даст ожидаемого результата.
Ответ 2
-
View.setAlpha(float)
принимает значение float как входное значение и ожидает значение в диапазоне 0..1 включительно.
-
ImageView.setAlpha(int)
принимает входной сигнал int и ожидает значение в диапазоне 0..255 включительно. ImageView.setAlpha(int)
устарел. Вероятно, это связано с тем, что они хотели удалить конфликт с базовым View.setAlpha(float)
- Как отмечали другие респонденты,
ImageView.setImageAlpha(int)
просто вызывает устаревший ImageView.setAlpha(int)
. Вы должны ожидать, что ImageView.setAlpha(int)
будет удалено в будущем обновлении API, поэтому его следует избегать.
Ответ 3
да, это только разница в именах - текущая реализация в Android-источнике на уровне API 16:
/**
* Sets the alpha value that should be applied to the image.
*
* @param alpha the alpha value that should be applied to the image
*
* @see #getImageAlpha()
*/
@RemotableViewMethod
public void setImageAlpha(int alpha) {
setAlpha(alpha);
}
Ответ 4
Я считаю, что только именование - это разница. Потому что setImageAlpha()
более специфичен, чем setAlpha()
. Для View#setAlpha
и ImageView#setAlpha/setImageAlpha
нет прямого отношения. Класс View
имеет setAlpha, потому что он может функционировать как родительский элемент View#ImageView
, поэтому он функционирует как контейнер.
С помощью setAlpha
вы можете установить непрозрачность для всего контейнера, чтобы он нуждался в этом методе. с помощью setImageAlpha
вы можете установить альфа только изображения, а не всего контейнера.
Кроме того, я не могу думать о причине, по которой они имеют как альфа-метод.