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)、動作は期待どおりです。タスクの実行中は進行状況バーが 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) を呼び出してプログレス バーの値を設定できるようにする必要があります。しかし、そうではないようです。私の場合、なぜこれがそうであるかについて、誰かが何か考えを提供できますか?

よろしくお願いいたします。

乾杯!

4

0 に答える 0