0

ProgressBar.setIndeterminate(true)在和之间切换时遇到问题ProgressBar.setIndeterminate(false)

在我的代码中,我在开始运行较长的任务之前调用以下命令:

myv_BottomView.setProgressBarIndeterminate(true);

它实际上调用setIndeterminate(true)了位于我的自定义视图(myv_BottomView)内的进度条。

一切都好。进度条开始动画。过了一会儿,我长时间运行的任务完成了,我打电话给:

myv_BottomView.setProgressBarIndeterminate(false);
myv_BottomView.setProgressBarValue(0);

它实际上调用了位于我的自定义视图(myv_BottomView)内的进度条setIndeterminate(false)setProgress(0)

第一行代码就成功了。进度条停止动画并停在某个随机位置。但是将其进度设置为 0 不起作用。所以我不能“清除”进度条。如果我setIndeterminate(true)setProgress(100)setIndeterminate(false)替换setProgress(0)行为符合预期 - 当我的任务正在执行时进度条处于 100% 并在完成时设置回 0。因此,设置该值似乎有效。

下面是我的完整代码。

在我的自定义视图 (myv_BottomView) 构造函数中初始化进度条:

public Myview_BottomView(Context context) 
{
    super(context);
    //Initialize progress bar pb_LightIntensity
    my_ProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal);
    my_ProgressBar.setId(ID_PB);
    final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 };  // Define a shape with ...
    ShapeDrawable pgDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null, null));   // ... rounded corners
    gDrawable.getPaint().setColor(0xFFf6a200);     // Sets the shape's (progress bar's) color
    ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);    // Adds the drawable to ...
    my_ProgressBar.setProgressDrawable(progress); // ... our progressBar
    ShapeDrawable pgBackgroundDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null, null)); // Define another shape with rounded corners (used for background)
    pgBackgroundDrawable.getPaint().setColor(0xFFa9a9a9);    // Sets the shape's (background's) color
    my_ProgressBar.setBackgroundDrawable(pgBackgroundDrawable);
    my_ProgressBar.setMax(100);
    RelativeLayout.LayoutParams mylp_pbIntesity = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    //mylp_pbIntesity.addRule(RelativeLayout.BELOW, txtview_DeviceName.getId());
    mylp_pbIntesity.setMargins(
            (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()), 
            (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()), 
            (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()), 
            (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()));
    my_ProgressBar.setIndeterminateDrawable(progress);
    //Add views to base layout of this class (the class itself extends RelativeLayout)
    this.addView(my_ProgressBar, mylp_pbIntesity);
}

设置进度值:

public void setProgressBarIndeterminate (boolean value) 
{ 
    if(my_ProgressBar!=null) {my_ProgressBar.setIndeterminate(value);} 
}

设置不确定模式:

public void setProgressBarValue (int value) 
{
    if (my_ProgressBar != null) 
    { 
        try
        {
            if(my_ProgressBar.isIndeterminate() == false)
            {
                if(value>100) { my_ProgressBar.setProgress(100); }
                else { my_ProgressBar.setProgress(value); }
                Log.i(LOG_TAG, "Myview_BottomView.setProgressBarValue: Progress bar value set to " + my_ProgressBar.getProgress());
            }
            else
            {
                Log.w(LOG_TAG, "Myview_BottomView.setProgressBarValue: Progress bar not in determinate mode");
            }
        }
        catch (Exception e)
        { Log.e(LOG_TAG, "Myview_BottomView.setProgressBarValue: Exception updating progress bar value."); }
    }
}

所以,我的想法是,在调用 setIndeterminate(false) 之后,应该再次通过调用 setProgress(value) 来设置进度条值。然而,情况似乎并非如此。任何人都可以就我的情况提供任何想法吗?

预先感谢您的所有帮助。

干杯!

4

0 回答 0