17

我正在创建一个自定义进度条(位于 a 下WebView),我想绘制的是 1dpWebViewProgressBar. 我正在修改现有的可绘制对象,即progress_horizontal.xml,并尝试了这样的事情:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

  (...)

  <item>
    <shape android:shape="line">
      <stroke android:width="1dp" android:color="#FF000000" />
    </shape>
  </item>

</layer-list>

然而,这条线是垂直居中的,但我希望它被绘制在可绘制对象的顶部。我能想出的唯一想法是在下面使用这个“hacky”渐变:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

  (...)

  <item>
    <shape>
      <gradient
          android:startColor="#FF000000"
          android:centerColor="#00000000"
          android:centerY="0.01"
          android:endColor="#00000000"
          android:angle="270"
      />
    </shape>
  </item>

</layer-list>

您是否有更好的想法如何绘制与定义的可绘制对象的顶部对齐的单线形状layer-list

4

4 回答 4

47

我也花了一段时间试图弄清楚这一点。希望有更好的方法来做到这一点,但这是我使用的方法,这也有点骇人听闻,但如果它对某人有帮助,我想我会分享。

图层列表中的第一项应该是您想要作为边框的任何颜色的纯色。接下来就是您想要拥有边框的东西,在您希望边框位于的任何一侧都有填充。

例如:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="YOUR BORDER COLOR" />
        </shape>
    </item>
    <item android:top="YOUR TOP BORDER THICKNESS">
        THE THING YOU WANT A BORDER ON
    </item>
</layer-list>

这个想法是,项目上的填充显示其背后的实体形状,呈现边框外观。您可以在任何一侧添加填充以添加边框。我想你可以通过这种方式变得更复杂并拥有不同颜色的边框。

看起来像一个黑客,但它对我有用。

编辑:我说的是“填充”,但在图层列表中它更像是一个偏移量。

于 2010-10-24T16:36:14.137 回答
12

我正在浏览所有相关主题,但没有人能解决我的问题。但是其中一些对于理解层列表或形状参数的工作方式非常有用。

我的问题是定义一个具有线性渐变的按钮并以不同的颜色绘制顶部和底部线。毕竟我破解了这个解决方案。我将文件保存在 res/drawable/blue_btn.xml

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:state_pressed="true" >        
        <shape android:shape="rectangle">
            <solid android:color="@color/blue_end" />
            <padding 
                   android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
            <stroke   
                android:width="1dp"
                android:color="@color/bottomline_btn" />                        
        </shape>    
    </item>
    <item>
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
           <item>
                <shape android:shape="rectangle">
                    <solid android:color="@color/blue" />
                    <gradient
                        android:startColor="@color/blue"
                        android:endColor="@color/blue_end"
                        android:angle="270" />
                </shape>
            </item>
            <item android:top="0dp" android:bottom="-1dp" android:left="-1dp" android:right="-1dp">
                <shape android:shape="rectangle">
                    <stroke   
                        android:width="1dp"
                        android:color="@color/topline_btn" />                       
                    <solid android:color="#00000000" />
                    <corners android:radius="0dp" />
                </shape>
            </item>
            <item android:top="-1dp" android:bottom="0dp" android:left="-1dp" android:right="-1dp">
                <shape android:shape="rectangle">
                    <stroke   
                        android:width="1dp"
                        android:color="@color/bottomline_btn" />                        
                    <solid android:color="#00000000" />
                    <corners android:radius="0dp" />
                </shape>
            </item>         
        </layer-list>
    </item>  
</selector>


<color name="topline_btn">#31ffffff</color>
<color name="bottomline_btn">#31000000</color>

<color name="blue">#449def</color>
<color name="blue_end">#2f6699</color>
于 2012-05-31T14:00:25.970 回答
1

你有没有试过用这样的东西来抵消它

http://android.amberfog.com/?p=9

于 2010-04-27T07:47:21.350 回答
0

我的解决方案是添加 9-patch 作为最后一层项目:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape>
            <solid android:color="@color/tab_button_active_layer2" />
        </shape>
    </item>
    <item android:bottom="@dimen/tab_button_active_bottom_bar_width">
        <shape>
            <solid android:color="@color/tab_button_active_layer1" />
        </shape>
    </item>
    <!-- 9-patch drawable -->
    <item android:drawable="@drawable/tab_button_border_top"/>
</layer-list>
于 2014-02-24T21:40:01.067 回答