Леденец Прогресс Бар Тонировка

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

После компиляции ваш пример выглядит примерно так:

class Program
{
        delegate void Action();
        static void Main(string[] args)
        {
                List<Action> actions = new List<Action>();

                DisplayClass1 displayClass1 = new DisplayClass1();
                for (displayClass1.i = 0; displayClass1.i < 10; ++displayClass1.i )
                        actions.Add(new Action(displayClass1.Lambda));

                foreach (Action a in actions)
                        a();
        }

        class DisplayClass1
        {
                int i;
                void Lambda()
                {
                        Console.WriteLine(i);
                }
        }
}

Сделав копию в цикле for, компилятор генерирует новые объекты на каждой итерации, например:

for (int i = 0; i < 10; ++i)
{
    DisplayClass1 displayClass1 = new DisplayClass1();
    displayClass1.i = i;
    actions.Add(new Action(displayClass1.Lambda));
}
23
задан Jumpa 24 June 2015 в 08:44
поделиться

4 ответа

Принятое решение не работало для меня на pre-Lollipop, но я нашел, что это решение подходит для всех API, и, кроме того, оно не использует устаревший код:

// fixes pre-Lollipop progressBar indeterminateDrawable tinting
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

    Drawable wrapDrawable = DrawableCompat.wrap(mProgressBar.getIndeterminateDrawable());
    DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(getContext(), android.R.color.holo_green_light));
    mProgressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));
} else {
    mProgressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), android.R.color.holo_green_light), PorterDuff.Mode.SRC_IN);
}

Удачного кодирования!

39
ответ дан Henrique de Sousa 24 June 2015 в 08:44
поделиться
/**change your progress drawable asrequired****/

   Drawable wrapDrawable = DrawableCompat.wrap(_progress.getIndeterminateDrawable());
   DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(this, R.color.colorOrange));
  _progress.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));
0
ответ дан DeepakPanwar 24 June 2015 в 08:44
поделиться

Попробуйте изменить ProgressBar на это

<ProgressBar
android:id="@+id/view_progress"
style="?android:attr/progressBarStyleLarge"
android:layout_width="50dp"
android:layout_height="50dp"
android:indeterminate="true"
android:indeterminateTintMode="src_in"
android:indeterminateTint="@color/red"
/>

Также вы можете сделать это программно, выполнив следующие действия:

ProgressBar progressBar;
progressBar = (ProgressBar)findViewById(R.id.view_progress);
progressBar.getProgressDrawable().setColorFilter(Color.RED, Mode.SRC_IN);

Ссылки

Настройка в ProgressBar Tint color

61
ответ дан Skizo-ozᴉʞS 24 June 2015 в 08:44
поделиться

Чтобы избежать окрашивания фона ProgressBar, вы должны получить ссылку на точный точечный рисунок из внутреннего ProgressBar LayerDrawable. Это хакерский способ сделать это, но он работает.

LayerDrawable layerDrawable = (LayerDrawable) progressBar.getProgressDrawable();
Drawable drawable = layerDrawable.getDrawable(2); // The progress bitmap
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
3
ответ дан Jules Dupont 24 June 2015 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: