如何以编程方式为每次旋转更改进度对话框 RING 颜色? (支持应该是最新的API)

How can you change a Progress Dialog RING color for each rotation programmatically? (support should be latest API)

编辑:仍然没有解决方案!至少有 post 个带有进度条的代码,也就是获取 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 秒后更改相同进度对话框的标题。

首先这不是推荐的解决方案,但你可以像下面那样实现它

每秒运行一个计时器并使用以下方法更新它。

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

编辑

下面写的代码是kotlin语言

    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)

查看输出

在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 初始化后调用下面的方法。另外,不要忘记在全局变量中引用progressbar。

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;

试试这个

 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;


}