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) 来设置进度条值。然而,情况似乎并非如此。任何人都可以就我的情况提供任何想法吗?
预先感谢您的所有帮助。
干杯!