Подтвердить что ты не робот

Разница между setAlpha и setImageAlpha

ImageView имеет два метода, связанных с методами: setAlpha и setImageAlpha. Первый из них доступен с уровня API 1, но с 16-го уровня он устарел. Последний доступен с уровня 16. Также существует еще один метод setAlpha, из класса View, и это введено в уровне API 11.

Является ли разница между ImageView # setAlpha и ImageView # setImageAlpha только в названии? Есть ли разница в поведении? Какая связь между View # setAlpha и ImageView # setAlpha?

4b9b3361

Ответ 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 вы можете установить альфа только изображения, а не всего контейнера.

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