【问题标题】:Android progress bar with padding带内边距的 Android 进度条
【发布时间】:2012-01-20 10:08:41
【问题描述】:

我想让我的进度条看起来像这样:

我不想用图片,所以我试着用形状来做这个:

<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 不起作用)。请帮帮我

【问题讨论】:

    标签: android android-progressbar


    【解决方案1】:
    <?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>
    

    see my blog

    【讨论】:

    • 太棒了..!!这应该是公认的答案。非常感谢!你节省了我的时间
    【解决方案2】:

    一个简单的解决方法是将进度条包装到具有圆形和与进度条相同背景颜色的布局中。

    可绘制进度条示例(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 文件中的填充。

    【讨论】:

    • 太棒了!你救了我的一天! +1
    【解决方案3】:

    是的,如果不使用@Nykakin 建议的图像,就可以完全做到这一点。要有 padding圆角 来表示进度是使用 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>
    

    【讨论】:

      【解决方案4】:

      很遗憾,我没有找到解决问题的方法。我可以制作圆角的唯一方法是使用圆形 9 间距图像

      有一个很好的教程可以做到这一点:http://blog.mediarain.com/2011/04/android-custom-progressbar-with-rounded-corners/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        • 2012-09-27
        • 1970-01-01
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多