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)
、動作は期待どおりです。タスクの実行中は進行状況バーが 100% になり、終了すると 0 に戻ります。したがって、値の設定は機能しているように見えます。setIndeterminate(false)
setProgress(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) を呼び出してプログレス バーの値を設定できるようにする必要があります。しかし、そうではないようです。私の場合、なぜこれがそうであるかについて、誰かが何か考えを提供できますか?
よろしくお願いいたします。
乾杯!