web-dev-qa-db-ja.com

Circular ProgressBarの背景:Android Xamarin

円形のプログレスバーがあり、正常に動作します。ただし、xmlドローアブルファイルで「背景」の形状を指定し、円の右側から進行が開始されても、背景が表示されません(図を参照)。 )。上から作って欲しいです。

enter image description here

これが私のコードです:

 <ProgressBar
        Android:id="@+id/progressBarToday"
        style="?android:attr/progressBarStyleHorizontal"
        Android:layout_width="50dip"
        Android:layout_height="50dip"
        Android:layout_centerInParent="true"
        Android:indeterminate="false"
        Android:max="60"
        Android:progress="0"
        Android:progressDrawable="@drawable/progressbar" />

progressbar.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:id="@Android:id/background"> <---not working!
    <shape
        Android:innerRadiusRatio="3"
        Android:shape="ring"
        Android:thicknessRatio="7.0">
        <solid Android:color="@color/red"/>
        </shape>
    </item>
    <item Android:id="@Android:id/progress">
    <shape
        Android:innerRadiusRatio="3"
        Android:shape="ring"
        Android:thicknessRatio="7.0">
        <solid Android:color="@color/blue"/>
        </shape>
    </item>
    </layer-list>

次のコードを使用して進行状況を設定します。

    ProgressBar pb = (ProgressBar)FindViewById (Resource.Id.progressBarToday);  
    _progressBar.Progress = _progressCount;

背景が表示されないのはなぜですか?どうすれば上から進捗を開始できますか?

誰でも助けてください、ありがとう。

10
Erma Isabel

私はそれを動かしました

     <ProgressBar
            Android:id="@+id/progressBarToday"
            style="?android:attr/progressBarStyleHorizontal"
            Android:layout_width="50dip"
            Android:layout_height="50dip"
            Android:layout_centerInParent="true"
            Android:indeterminate="false"
            Android:max="60"
            Android:progress="0"
            Android:background="@drawable/bg" // here is working background
            Android:progressDrawable="@drawable/progressbar" />
4
Erma Isabel

次の属性を背景アイテムに追加する必要があります。

Android:useLevel="false"

そのようです:

<?xml version="1.0" encoding="UTF-8" ?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <item Android:id="@Android:id/background"> <---not working!
    <shape
        Android:innerRadiusRatio="3"
        Android:shape="ring"
        Android:useLevel="false"
        Android:thicknessRatio="7.0">
        <solid Android:color="@color/red"/>
    </shape>
  </item>
  <item Android:id="@Android:id/progress">
    <shape
        Android:innerRadiusRatio="3"
        Android:shape="ring"
        Android:thicknessRatio="7.0">
        <solid Android:color="@color/blue"/>
    </shape>
  </item>
</layer-list>
27
Thomas

上から始めるには、「回転」を使用できます

<item Android:id="@Android:id/progress">
    <rotate
        Android:fromDegrees="-90"
        Android:toDegrees="-90">
        <shape
            Android:innerRadiusRatio="3"
            Android:shape="ring"
            Android:thicknessRatio="7.0"
            Android:useLevel="true">
            <solid Android:color="@color/blue"/>
        </shape>
     </rotate>
</item>
5
user3728055

はい。私は手遅れですが、これは他の人を助けるかもしれません。このコードはビットマップ画像を返し、ImageViewまたはImageButtonで使用できます。

private Bitmap progressBar(int progress) {

       Bitmap bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        Paint paint = new Paint();
        Paint.setColor(Color.parseColor("#FF0000"));
        Paint.setStrokeWidth(20);
        Paint.setAntiAlias(true);
        Paint.setStyle(Paint.Style.FILL_AND_STROKE);
        canvas.drawCircle(150, 150, 140, Paint);
        Paint.setColor(Color.parseColor("#01aa01"));
        Paint.setStrokeWidth(16);
        Paint.setStyle(Paint.Style.STROKE);
        final RectF oval = new RectF();
        Paint.setStyle(Paint.Style.FILL);
        oval.set(10, 10, 290, 290);
        canvas.drawArc(oval, 270, (progress * 360) / 100, true, Paint);
        Paint.setStrokeWidth(1);
        Paint.setTextSize(100);
        Paint.setTextAlign(Align.CENTER);
        Paint.setColor(Color.parseColor("#ffffff"));
        canvas.drawText("" + progress, 150, 150 + (Paint.getTextSize() / 3),
                Paint);

    return bitmap;
}
1