web-dev-qa-db-ja.com

ProgressBarの回転を停止させる方法は?

水平ProgressBarを追加すると、期待どおりに動作します-進行状況の値を設定して表示します。

ただし、ProgressBar(円形)を追加すると、スピンします。以上です。このような形式では、進行状況の値が表示されないため、進行状況バーよりも「お待ちください」インジケーターになります。

だから私の質問は(名前の進行状況が進行状況を意味すると仮定)-回転を停止して進行状況の値を表示する方法?たとえば、最大値を100に設定し、値を50に設定すると、半円弧が表示されると予想されます。

言い換えれば、形状だけを除いて、円形のProgressBarを水平のProgressBarのように動作させる方法は?

27
greenoldman

Toadzkyがコメントしたように、焼き込み方法はありません。あなたはこれを試すかもしれません ProgressWheel 。他に何もない場合は、それを実装する方法のアイデアを提供する必要があります。

2
Geobits

私はこれが古い投稿であることを知っていますが、同じ問題に遭遇し、それを機能させました。

想像するよりも簡単です。ドローアブルフォルダー内のxmlファイルでカスタムプログレスを設定し、<rotate>タグの "fromDegrees"および "toDegrees"属性を処理する必要があります。

これは、custom_progress.xmlのコードです(好きなようにカスタマイズできますが、「fromDegrees」と「toDegrees」は変更しないでください)。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:id="@Android:id/background">
        <shape
            Android:innerRadiusRatio="2.3"
            Android:shape="ring"
            Android:useLevel="false"
            Android:type="sweep"
            Android:thicknessRatio="15.0">
            <solid Android:color="#0099ff"/>
        </shape>
    </item>
    <item Android:id="@Android:id/progress">
        <rotate
            Android:pivotX="50%"
            Android:pivotY="50%"
            Android:fromDegrees="-90"
            Android:toDegrees="-90">
            <shape
                Android:innerRadiusRatio="2.3"
                Android:shape="ring"
                Android:angle="0"
                Android:type="sweep"
                Android:thicknessRatio="15.0">
                <solid Android:color="#e0e0e0"/>
            </shape>
        </rotate>
    </item>
</layer-list>

そして、プログレスバーでは、この属性を設定する必要があります:

<ProgressBar
    Android:id="@+id/progressbar"
    style="?android:attr/progressBarStyleHorizontal"
    Android:layout_width="100dp"
    Android:layout_height="100dp"
    Android:indeterminate="false"
    Android:max="100"
    Android:progress="20"
    Android:progressDrawable="@drawable/custom_progress" />

ここで何が起こっているかというと、進行状況は-90度で始まり、私にとっては進行状況バービューの上側であり、右側に向かって同じ程度に続きます。これにより、ビューの進行が開始され、終了します。同程度。

注:「fromDegrees」と「toDegrees」の両方に0を設定すると、進行は円の右側から開始されます。

同じ要件を持つ人々に役立つことを願っています。

10
Fabian Almaraz

Api 21あなたはそのようなことをすることができます:あなたのProgressBarがこのように定義すると仮定します:

 <ProgressBar xmlns:Android="http://schemas.Android.com/apk/res/Android"
    style="?android:attr/progressBarStyleLarge"
    Android:id="@+id/progress_bar"
    Android:layout_width="@dimen/item_width"
    Android:layout_height="@dimen/item_height"
    Android:clickable="false"
    Android:indeterminate="true"
    Android:indeterminateDrawable="@drawable/progress"/>

そしてこれは progress.xml

<shape
    Android:innerRadiusRatio="3"
    Android:shape="ring"
    Android:thicknessRatio="8"
    Android:useLevel="false" >

    <size
        Android:height="76dip"
        Android:width="76dip" />

    <gradient
        Android:angle="0"
        Android:endColor="@color/colorGrayText"
        Android:startColor="@Android:color/transparent"
        Android:type="sweep"
        Android:useLevel="false" />

</shape>

これでProgressBarでこれを行うことができます:

 ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar);
        if (progressBar != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
                RotateDrawable rotateDrawable = (RotateDrawable) progressBar.getIndeterminateDrawable();
                rotateDrawable.setToDegrees(0);
            }
        }
6
yshahak