在Android上的形状上绘制顶部边框
问题描述:
我正在创建自定义进度栏(位于WebView
下),我想绘制的是WebView
和ProgressBar
之间的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
定义的上方设置了一个线的形状?
答
抵消它,我花了一段时间试图弄清楚这一点为好。希望有一个更好的方法来做到这一点,但这里是我使用的方法,这也是一种骇人听闻,但如果它帮助某人,我想我会分享。
图层列表中的第一项应该是任何想要成为边框颜色的实体。接下来就是你想要边框的东西,在你想要边框的任何一边填充边框。
例如:
<?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>
的想法是,关于该项目的填充揭示其背后的固体形状,使边框的外观。您可以在任何一边添加填充以添加边框。我想你可能会变得更复杂,并且有不同的彩色边框。
看起来像一个黑客,但它为我工作。
编辑:我说“填充”,但在层列表中它是更多的偏移量。
答
我正在浏览所有相关主题,但没有人能解决我的问题。但其中一些对于了解图层列表或形状参数的工作方式非常有用。
我的问题是定义一个线性渐变按钮,并绘制不同颜色的顶部和底部线。毕竟我砍了这个解决方案。我保存的文件的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>
它的工作原理!谢谢 – Kevin 2011-07-13 11:30:55
这显然不适用于透明的“THING”。 – Kenneth 2012-09-20 06:37:51
谢谢你。 :)我添加了一个额外的图层以拥有我需要的底部边框。 – KarenAnne 2013-07-08 08:28:00