2011-01-27 4 views
19

Можно ли установить и получить альфа/непрозрачность макета и все его дочерние представления? Я не говорю об этом. Произнесите коллекцию видеоустройств, таких как Play, Pause и Progressbar в относительной компоновке.Установить альфа/непрозрачность макета

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

ответ

59

Вы можете установить альфа на макет и его дочерние элементы (или любой другой вид, если на то пошло), используя 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); 

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

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

Не уверен, что получил текущее значение альфа-канала.

+0

Спасибо. Я использовал анимацию, но я устанавливал видимость объекта после завершения анимации вместо использования метода setFillAfter. –

+0

Кажется, сломать анимацию (если запустить во время анимации). Любое исправление для этого? – Sufian

+0

В качестве обходного пути я использовал полупрозрачное изображение, заданное как фон 'View'. – Sufian

6

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

+0

Спасибо, с нетерпением жду метода setAlpha. Что-то я больше использую с других языков. –

15

Вот метод, который работает во всех версиях (thanks to @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, если вы вы можете создать настраиваемое представление, которое вызывает , прежде чем рисовать его дочерние элементы (thanks to @RomainGuy).

+0

Это прекрасно, спасибо – Selecsosi

+0

Спасибо Takhion. Добавить @SuppressLint («NewApi») :) – Nifhel

+0

Использование: ViewCompat.setAlpha (View, float). – TomerBu

3

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

+0

Цитата из doc: "* До API 11 это не будет иметь никакого эффекта. *" – Pang

+0

Нет такого метода. Я установил минимальный набор api равным 11. Но он имеет метод ViewCompat.getAlpha (anyView) –

0

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

ViewCompat.setAlpha (Вид вид, плавать альфа)

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