Ответ 1
EDIT - пример ниже относится к Android pre-SDK11, но я только что узнал об удивительно большой библиотеке под названием Девять старых андроидов, Удивительная вещь, которую он делает, - это возможность всех анимационных возможностей Android 3.0 для всех версий API!!!
Предыдущий ответ
Я действительно столкнулся с такой проблемой, когда хотел установить альфа динамически на сложный макет.
Я создал переопределение onSetAlpha()
и добавил еще одну рекурсивную функцию, которая проверяет все виды фонового изображения, чертежей и цветов текста.
@Override
public boolean onSetAlpha(int alpha)
{
return onSetAlpha(alpha, theLayoutYouWantToSetAlphaTo);
}
public boolean onSetAlpha(int alpha, View view)
{
if (view instanceof ViewGroup)
{
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++)
{
onSetAlpha(alpha, ((ViewGroup) view).getChildAt(i));
if (((ViewGroup) view).getBackground() != null) ((ViewGroup) view).getBackground().setAlpha(alpha);
}
}
else if (view instanceof ImageView)
{
if (((ImageView) view).getDrawable() != null) ((ImageView) view).getDrawable().setAlpha(alpha);
if (((ImageView) view).getBackground() != null) ((ImageView) view).getBackground().setAlpha(alpha);
}
else if (view instanceof TextView)
{
((TextView) view).setTextColor(((TextView) view).getTextColors().withAlpha(alpha));
if (((TextView) view).getBackground() != null) ((TextView) view).getBackground().setAlpha(alpha);
}
else if (view instanceof EditText)
{
((EditText) view).setTextColor(((EditText) view).getTextColors().withAlpha(alpha));
if (((EditText) view).getBackground() != null) ((EditText) view).getBackground().setAlpha(alpha);
}
return true;
}
Вы можете добавить другие виды просмотров по мере необходимости.