Установить альфа / непрозрачность макета - PullRequest
19 голосов
/ 27 января 2011

Можно ли установить и получить альфа / непрозрачность макета и все его дочерние виды? Я не говорю о фоне. Произнесите набор элементов управления видео, таких как «Воспроизведение», «Пауза» и «Прогрессбар» в относительной компоновке.

Я могу использовать анимацию для постепенного увеличения и уменьшения яркости, но хотел знать, есть ли прямой метод, который я мог бы использовать.

Ответы [ 5 ]

59 голосов
/ 27 января 2011

Вы можете установить альфа на макете и его дочерних элементах (или любом другом представлении по этому вопросу), используя AlphaAnimation с длительностью 0 и опцией setFillAfter.

Пример:

AlphaAnimation alpha = new AlphaAnimation(0.5F, 0.5F);
alpha.setDuration(0); // Make animation instant
alpha.setFillAfter(true); // Tell it to persist after the animation ends
// And then on your layout
yourLayout.startAnimation(alpha);

ВыМожно использовать одну анимацию для нескольких компонентов для экономии памяти.И выполните reset (), чтобы использовать снова, или clearAnimation (), чтобы сбросить альфа.

Хотя это выглядит грубо и взломано, на самом деле это хороший способ установить альфу в представлении set ov, которое не занимает много памяти или процессоравремя.

Не уверен насчет получения текущего значения альфа.

15 голосов
/ 30 мая 2013

Вот метод, который работает во всех версиях ( благодаря @ AlexOrlov ):

@SuppressLint("NewApi")
public static void setAlpha(View view, float alpha)
{
    if (Build.VERSION.SDK_INT < 11)
    {
        final AlphaAnimation animation = new AlphaAnimation(alpha, alpha);
        animation.setDuration(0);
        animation.setFillAfter(true);
        view.startAnimation(animation);
    }
    else view.setAlpha(alpha);
}

Очевидно, для API менее 11, если вы можете, вы должны создать пользовательское представлениекоторый вызывает Canvas.saveLayerAlpha() до рисования своих потомков ( благодаря @ RomainGuy ).

6 голосов
/ 27 января 2011

Решение Алекса работает, но другой способ заключается в создании пользовательского представления, которое вызывает Canvas.saveLayerAlpha () перед рисованием его потомков. Обратите внимание, что в Android 3.0 появился новый API View.setAlpha ():)

3 голосов
/ 28 ноября 2014

Теперь вы можете использовать ViewCompat.setAlpha(View, float) для этого действия.

0 голосов
/ 08 февраля 2016

Извините за мой ответ, но если вам нужна альфа, вы можете использовать класс ViewCompat

ViewCompat.setAlpha (Просмотр представления, плавающая альфа) * ​​1003 *

ViewCompat находится в appcompat v4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...