Разница между 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) является общим методом, доступным для всех Views, включая 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) просто вызывает до конца к deprecated ImageView.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 вы можете установить Альфа только изображение, а не целое контейнер.

кроме того, я не могу придумать причину, по которой у них есть альфа-метод.