Как программно изменить цвет RING в Progress Dialog для каждого поворота?(поддержка должна быть последней API) - PullRequest
0 голосов
/ 25 февраля 2019

РЕДАКТИРОВАТЬ: Stll нет решения!По крайней мере, почтовый код с Progress Bar, который также получает NullPointer

Как вы можете программно изменить цвет диалога прогресса для каждого вращения?

Код:

if (checkValidation()) {
                    progressDialog.setTitle(setStringResource(R.string.reg_user));
                    progressDialog.setMessage(setStringResource(R.string.wait));
                    progressDialog.setCancelable(false);
                    progressDialog.show();
                    registerUser(getName, getEmail, getPassword);
                }

Также еще один вопрос.Что, если я хочу изменить заголовок того же диалогового окна прогресса, используя, например, progressDialog.setMessage(setStringResource(R.string.creating_user)); Но для определенного периода времени?

Как будто я хочу изменить заголовок того же диалогового окна прогресса через 30 секунд.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

попробуйте

 progressDialog = (ProgressBar) findViewById(R.id.progressbar_Horizontal);
    AnimationDrawable animdrawable = getProgressBarAnimation();
    progressDialog.setBackgroundDrawable(animdrawable);

Для анимации

    private AnimationDrawable getProgressBarAnimation() {

    GradientDrawable rainbow1 = new GradientDrawable(Orientation.LEFT_RIGHT,
            new int[]{Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW});

    GradientDrawable rainbow2 = new GradientDrawable(Orientation.LEFT_RIGHT,
            new int[]{Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN});

    GradientDrawable rainbow3 = new GradientDrawable(Orientation.LEFT_RIGHT,
            new int[]{Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN});

    GradientDrawable rainbow4 = new GradientDrawable(Orientation.LEFT_RIGHT,
            new int[]{Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE});

    GradientDrawable rainbow5 = new GradientDrawable(Orientation.LEFT_RIGHT,
            new int[]{Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA});

    GradientDrawable rainbow6 = new GradientDrawable(Orientation.LEFT_RIGHT,
            new int[]{Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED});


    GradientDrawable[] gds = new GradientDrawable[]{rainbow1, rainbow2, rainbow3, rainbow4, rainbow5, rainbow6};

    AnimationDrawable animation = new AnimationDrawable();

    for (GradientDrawable gd : gds) {
        animation.addFrame(gd, 100);

    }

    animation.setOneShot(false);

    return animation;


}
0 голосов
/ 25 февраля 2019

Во-первых это не рекомендуемое решение, но вы можете достичь его, как показано ниже

Запускает таймер для каждой секунды и обновляет его, используя метод ниже.

ProgressBar progressbar=(ProgressBar) progressDialog.findViewById(android.R.id.progress);
progressbar.getIndeterminateDrawable().setColorFilter(Color.parseColor("#C60000"), android.graphics.PorterDuff.Mode.SRC_IN);

РЕДАКТИРОВАТЬ

Код, написанный ниже на языке котлина

    pDialog = ProgressDialog.show(mContext, "Title goes here", "Message goes here")
    pDialog?.show()

    val progressbar = pDialog!!.findViewById(android.R.id.progress) as ProgressBar
    progressbar.indeterminateDrawable.setColorFilter(Color.parseColor("#C60000"), android.graphics.PorterDuff.Mode.SRC_IN)

см. Вывод

enter image description here

В Java

ProgressDialog progressDialog = ProgressDialog.show(this, "Title goes here", "Message goes here");
progressDialog.show();

ProgressBar progressbar = (ProgressBar) progressDialog.findViewById(android.R.id.progress);
runTimer(progressbar);

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

void runTimer(final ProgressBar progressbar){

        final Handler handler = new Handler();
        final int delay = 1000; //milliseconds

        handler.postDelayed(new Runnable(){
            public void run(){
                count++;
                switch (count%3){
                    case 0:
                        progressbar.getIndeterminateDrawable().setColorFilter(Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);
                        break;
                    case 1:
                        progressbar.getIndeterminateDrawable().setColorFilter(Color.GREEN, android.graphics.PorterDuff.Mode.SRC_IN);
                        break;
                    case 2:
                        progressbar.getIndeterminateDrawable().setColorFilter(Color.BLUE, android.graphics.PorterDuff.Mode.SRC_IN);
                        break;
                }



                handler.postDelayed(this, delay);
            }
        }, delay);
    }

Вам необходимо объявить count переменной глобально.

int count = 0;
...