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

Как изменить прозрачность (альфа) представления на pre-SDK-11 на Android?

Как я могу изменить прозрачность (альфа) представления на pre-SDK-11 на Android?

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

4b9b3361

Ответ 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;
}

Вы можете добавить другие виды просмотров по мере необходимости.

Ответ 2

Попробуйте использовать AlphaAnimation: http://developer.android.com/reference/android/view/animation/AlphaAnimation.html


/* Придется использовать анимацию, чтобы получить угасание карты. */

AlphaAnimation alpha = new AlphaAnimation(0.7F, 0.7F);
alpha.setDuration(0); // Make animation instant
alpha.setFillAfter(true); // Tell it to persist after the animation ends
view.startAnimation(alpha);

Ответ 3

The ViewHelper NineOldAndroids - это то, что я использую, это статический вспомогательный класс и настоящий драгоценный камень! Многие здесь рекомендуют NineOldAndroids, но я не видел упоминания о ViewHelper. Это действительно легко использовать.

import com.nineoldandroids.view.ViewHelper;
...

ViewHelper.setAlpha(myView, .2f);

Вы также можете использовать его для установки других свойств, таких как x, y и т.д., очень удобно при настройке анимации или создании пользовательского интерфейса. Большое спасибо Джейку Уортону за то, что он поделился своей работой с сообществом!

Ответ 4

Вы можете расширить метод draw draw() и использовать canvas.saveAlphaLayer()

public void draw(Canvas canvas) {
    canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG);
    super.draw(canvas);
    canvas.restore();
}

Ответ 5

Вы можете установить Alpha для всех цветов представления (например, текст кнопки или дочерние представления группы представлений). Сделайте их в цветах xml и используйте во всех представлениях.

Вы можете читать цвета из представления рекурсивно и добавлять альфа к ним и устанавливать их обратно.

Вы можете создать представление как основной вид нового действия. Затем сделайте так, как в Как создать прозрачную активность на Android?