在Android编程中运行时以编程方式自定义进度轮的颜色变化

5
我正在制作自定义圆形进度轮。这是我需要的,一旦进度轮完成百分之百的进度。然后,当我再次点击时,我需要在运行时更改进度颜色...
我从这个链接下载了代码.. https://github.com/Todd-Davies/ProgressWheel 注意:我点击一个按钮,进度开始进行。进度条圆形已经有一种颜色。在进度完成100%之后,我希望它重新开始,这时,我需要在运行时将颜色更改为红色...
我也尝试了这个链接.. 这个链接是用于默认进度栏。但是,我正在使用自定义进度栏。这就是为什么我无法像这样使用此方法的原因... http://myandroidsolutions.blogspot.in/2012/11/android-change-indeterminate-progress.html http://www.tiemenschut.com/how-to-customize-android-progress-bars/ 有人能帮我完成这个任务吗? 提前致谢...

我的代码: onCreate方法:

increment.setOnClickListener(new OnClickListener() {
@SuppressLint("WrongCall")
public void onClick(View v) {
Log.v("test", "-----increment button clicked--------");
if(!running) {
progress1 = (int) 370 ; 
Thread s = new Thread(r);
s.start();
}
}
});

final Runnable r = new Runnable() {
        @SuppressLint("WrongCall")
        public void run() {
            //Log.v("test", "----- thread called--------");
            running = true;
            //Log.v("test", "progress:"+progress);
            //Log.v("test", "progress1:"+progress1);
            progress2 = progress - progress1 ;   
                          //progress = 360 , progress1 = uservalue
            Log.v("test", "progress:"+progress);
            Log.v("test", "progress1:"+progress1);
            Log.v("test", "progress2 = progress - progress1:"+progress2);
            //percentage = pw_two.incrementProgress();
            // pw_two.setBarColor(Color.parseColor("#FF0000"));

            while(progress2<360) {    
            percentage = pw_two.incrementProgress();
            Log.v("test","percentage:"+percentage);
                progress2++;
                try {
                    Thread.sleep(15);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }



 // here when crossing 360 above , then color change effect needed..
 //why we using this function, when put ten minutes for break,
    who taking more than ten minutes,, 
 // then that time itself, need to change color..
   i finish that time calculation....
                if(progress2 > 359) {
// here.. need to call this method two times.. then only, wheel will be refreshed......
                    //onPause_Reset_ProgressWheelOne();
                    onPause_Reset_ProgressWheelOne();
                    //break;
                }
            }

            running = false;
        }
     };

  public void onPause_Reset_ProgressWheelOne() {

     Log.v("test", "onPause_Reset_ProgressWheelOne--------");

    progress = 360;
    pw_two.setRimColor(Color.parseColor("#fe854c")); //1988c4   //fe854c
    pw_two.setBarColor(Color.RED);
    //pw_two.resetCount();  
    pw_two.refreshWheel();
    // progress = 0;
    // pw_two.setProgress(0);

  }

 ProgressWheel.java CLass  :

  public void refreshWheel() {

    setupPaints();
}

你好,能告诉我你在项目中如何引用这个库吗?你是将这个 ProgressBar 项目设置为库,然后像这样在你的项目中引用它的吗? - Jade Byfield
嗨,我没有将其作为库包含。我只是将那些类文件复制到我的现有项目文件夹中,并使用它。同样的方法也适用于 XML 文件到布局,您可以将其放在任何地方。 - harikrishnan
2个回答

7

ProgressWheel.java (com.todddavies.components.progressbar.ProgressWheel) 中添加一个方法:

public void refreshTheWheel() {

    setupPaints();

}

我点击按钮后,进度条开始运转。进度条圆圈已经是一个颜色了。当进度完成100%时,我希望它能重新开始,这时候,我需要在运行时将颜色更改为红色。
何时需要更改颜色:
// Progress is 100%
if (progress == 360) {

    // Change the color
    mProgressWheel.setBarColor(Color.RED);

    // Refresh
    mProgressWheel.refreshTheWheel();

    // Reset progress
    progress = 0;
    mProgressWheel.setProgress(0);

    // You can also use:
    // mProgressWheel.resetCount();
}

注意:请确保允许编辑/添加此库。
编辑:
看看以下更改是否能够获得所需的输出:
声明全局变量:
// `progress` isn't needed
// int progress = 360;
int progress1 = 0;
int progress2 = 0;

....
....

increment.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        Log.v("test", "-----increment button clicked--------");

        if(!running) {

            // I am not sure what you are using `progress1` for
            // progress1 = (int) 370 ;

            progress1 = 0;
            progress2 = 0;

            // reset `pw_two`
            pw_two.resetCount();

            Thread s = new Thread(r);
            s.start();
        }
    }
});    

现在,谈到Runnable
final Runnable r = new Runnable() {
    public void run() {
        running = true;

        // I could not figure out why you are using this
        // Can you explain what this does?
        // progress2 = progress - progress1 ;

        while(progress2 < 361) {
            pw_two.incrementProgress();

            // Increment both `progress1` and `progress2`
            progress2++;
            progress1++;        

            try {
                Thread.sleep(15);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            // Here, reset `progress2`, but not `progress1`
            if (progress2 == 360) {
                pw_two.setRimColor(Color.parseColor("#fe854c")); //1988c4   //fe854c
                pw_two.setBarColor(Color.RED);
                pw_two.refreshWheel();
                progress2 = 0;
                pw_two.setProgress(0);

                // Log value of `progress1`
                Log.v("Progress 1", "progress1 is " + progress1);
            }
        }
        running = false;
    }
};

您不需要调用另一个方法。在progressValue = 360时,颜色将切换。如果我对您尝试实现的内容有所误解,请举一些使用案例进行说明。

谢谢您的回复。它运行得很好,但是我需要调用refreshwheel方法两次才能使其正常工作。 - harikrishnan
但是,现在我有一个问题,当连续达到360时,我需要改变颜色。我不想再次点击。之前的背景颜色是相同的。只有当超过360的百分比达到一定程度时,才需要改变新的颜色。 - harikrishnan
@harikrishnan请检查我上面的编辑。如果有不清楚或错误的地方,请让我知道。 - Vikram
@harikrishnan 让我们在这里继续我们的谈话:[链接](http://chat.stackoverflow.com/rooms/36640/color-changing-in-custom-progress-wheel-at-runtime-in-android-programmatically)。 - Vikram
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/36665/discussion-between-harikrishnan-and-user2558882 - harikrishnan
显示剩余5条评论

1

请查看this示例,它有一个圆形进度条,当进度增加时会改变颜色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接