在Android上的形状上绘制顶部边框

问题描述:

我正在创建自定义进度栏(位于WebView下),我想绘制的是WebViewProgressBar之间的1dp宽的线。我修改现有的绘制,即progress_horizontal.xml,并试图像这样:在Android上的形状上绘制顶部边框

<?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> 

此行不过是垂直居中,但我想它要在绘制的顶部绘制。我能想出的唯一的想法就是用低于这个“哈克”梯度:

<?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定义的上方设置了一个线的形状?

你尝试通过这样的

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

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

图层列表中的第一项应该是任何想要成为边框颜色的实体。接下来就是你想要边框的东西,在你想要边框的任何一边填充边框。

例如:

<?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> 

的想法是,关于该项目的填充揭示其背后的固体形状,使边框的外观。您可以在任何一边添加填充以添加边框。我想你可能会变得更复杂,并且有不同的彩色边框。

看起来像一个黑客,但它为我工作。

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

+0

它的工作原理!谢谢 – Kevin 2011-07-13 11:30:55

+9

这显然不适用于透明的“THING”。 – Kenneth 2012-09-20 06:37:51

+0

谢谢你。 :)我添加了一个额外的图层以拥有我需要的底部边框。 – KarenAnne 2013-07-08 08:28:00

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

我的问题是定义一个线性渐变按钮,并绘制不同颜色的顶部和底部线。毕竟我砍了这个解决方案。我保存的文件的Unter RES /绘制/ 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> 

我的解决办法是增加9补丁作为最后一层项目:

<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>