7

プログレスバーを次のように表示したい:

ここに画像の説明を入力

私は画像を使いたくないので、形でこれを作ろうとしました:

<item android:id="@android:id/background">
    <shape>
        <corners android:radius="50dp" />

        <gradient
            android:angle="270"
            android:centerColor="#2a2723"
            android:centerY="0.75"
            android:endColor="#2a2723"
            android:startColor="#2a2723" />
    </shape>
</item>
<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="50dp" />

            <gradient
                android:angle="270"
                android:centerColor="#16e61c"
                android:centerY="0.75"
                android:endColor="#9dfd6e"
                android:startColor="#16e61c" />
        </shape>
    </clip>
</item>
<item android:id="@android:id/progress">
    <clip>
        <shape>
            <corners android:radius="50dp" />

            <gradient
                android:angle="270"
                android:endColor="#9dfd6e"
                android:startColor="#16e61c" />
        </shape>
    </clip>
</item>

しかし、緑の線にパディングを設定することはできません (可能な限りどこにでも設定しようとしました)。また、そのような丸い角を作ることもできません (corners android:radius機能していないように見えます)。私を助けてください

4

4 に答える 4

8
<?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>
            <solid android:color="#222" />
            <corners android:radius="10dp" />
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <layer-list>
                <item>
                    <color android:color="#00000000" />
                </item>
                <item
                    android:left="5dp"
                    android:top="5dp"
                    android:right="5dp"
                    android:bottom="5dp">
                    <shape>
                        <solid android:color="#00FF00" />
                        <corners android:radius="10dp" />
                    </shape>
                </item>
            </layer-list>
        </clip>
    </item>
</layer-list>

私のブログを見て

于 2014-09-08T12:04:11.270 に答える
7

簡単な回避策は、プログレス バーを丸みを帯びた形状でプログレス バーと同じ背景色を持つレイアウトにラップすることです。

サンプル プログレス バー ドローアブル (drawable/progress_bar.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">
        <shape>
            <corners android:radius="50dip" />
            <solid android:color="@color/white"/>
            <padding android:bottom="3dip" android:left="3dip" android:right="3dip" android:top="3dip" />
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <bitmap android:src="@drawable/test_progress_bar_progress" android:tileMode="repeat"/>
    </item>
</layer-list>

プログレスバーのスタイル:

<resources>
    <style name="ProgressBarStyle" parent="@android:style/Widget.ProgressBar.Horizontal">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">10dip</item>
        <item name="android:max">100</item>
        <item name="android:progressDrawable">@drawable/progress_bar</item>
    </style>
</resources>

レイアウト形状 (drawable/rounded_shape.xml):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <padding android:top="2dip" android:left="2dip" android:right="2dip" android:bottom="2dip"/>
    <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/>
    <solid android:color="@color/white"/>
</shape>

アクティビティのレイアウト:

<!-- ... -->
      <LinearLayout                     
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:background="@drawable/rounded_shape"
                  android:layout_marginLeft="30dip"
                  android:layout_marginRight="30dip">
            <ProgressBar
                    android:id="@+id/testSummaryProgressBar"
                    android:progress="10"
                    style="@style/ProgressBarStyle"/>
        </LinearLayout>
<!-- ... -->

効果:

ここに画像の説明を入力

プログレス バーのパディングを増やすには、rounded_shape ファイルのパディングを増やす必要があります。

于 2012-08-31T16:56:10.570 に答える
1

はい、@Nykakinが提案したような画像を使用せずに、それを正確に行うことは可能です。進行状況にパディング丸みを帯びた角を持たせるには、アイテムの進行状況に list-layer を使用します。

<item android:id="@android:id/progress">
<clip>
  <layer-list>
       <-- transparent background  -->
   <item>
       <color android:color="#00000000" />
   </item>
   <-- padding -->
   <item  
      android:left="2dp"
      android:top="2dp"
      android:right="2dp"
      android:bottom="2dp">
    <shape>
        <corners android:radius="50dp" />

        <gradient
            android:angle="270"
            android:endColor="#9dfd6e"
            android:startColor="#16e61c" />
     </shape>
   </item>
  </layer-list>
</clip>

于 2015-03-02T16:39:00.943 に答える
0

残念ながら、私の問題の解決策は見つかりませんでした。角を丸くする唯一の方法は、丸みを帯びた9ピッチの画像を使用することでした

それを行うための優れたチュートリアルがあります: http://blog.mediarain.com/2011/04/android-custom-progressbar-with-rounded-corners/

于 2012-02-21T21:14:09.700 に答える