Разница между setAlpha и setImageAlpha
ImageView имеет два метода, связанные с методами:setAlpha и setImageAlpha. Первый доступен с уровня API 1, но устарел с уровня 16. Последний доступен с уровня 16. Есть еще один setAlpha способ, с посмотреть класс, и это введено в уровень API 11.
разница между ImageView#setAlpha и ImageView#setImageAlpha только в именовании? Быть там есть разница в поведении? Каковы отношения между View#setAlpha и ImageView#setAlpha?
4 ответов
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
. Конечно, если вы установите фон Drawable на вашем ImageView
что вы также хотите быть полупрозрачным, этот метод не даст ожидаемого результата.
-
View.setAlpha(float)
принимает float в качестве входных данных и ожидает значение в диапазоне 0..1 включительно. -
ImageView.setAlpha(int)
принимает int в качестве входных данных и ожидает значение в диапазоне 0..255 включительно.ImageView.setAlpha(int)
устарела. Это, вероятно, потому, что они хотели удалить конфликт с основнымView.setAlpha(float)
- как отметили другие респонденты
ImageView.setImageAlpha(int)
просто вызывает до конца к deprecatedImageView.setAlpha(int)
. Вы должны ожидать, чтоImageView.setAlpha(int)
будет удален в будущем API обновление и поэтому следует избегать его использования.
да, это только разница имен-текущая реализация в источнике 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);
}
Я считаю, что разница только в названии. Потому что setImageAlpha()
более конкретную, чем setAlpha()
. Для View#setAlpha
и ImageView#setAlpha/setImageAlpha
нет прямой связи.. the View
класс имеет setAlpha, потому что он может функционировать как родитель View#ImageView
таким образом, он функционирует как контейнер.
С setAlpha
вы можете установить непрозрачность всего контейнера, для этого ему нужен этот метод. с setImageAlpha
вы можете установить Альфа только изображение, а не целое контейнер.
кроме того, я не могу придумать причину, по которой у них есть альфа-метод.