开发中遇到单/多边框的UI,简单的可以自己写shape图,复杂的一般都让设计配合制作9patch图了。

今天不说需要切图的情况,只聊简单的单/多边框,主要是实现思路。

效果很简单:

1d64890893f42e72003a98bd3d539972.png

就以上图为例介绍,只有上边框,边框红色、宽1dp,其余为白色。

思路一

两层画布叠加:底层红色;上层白色;

上层白色画布下移1dp。

代码实现:

其中 标签的 left 、 top 、 right 、 bottom 属性可以理解为 view 的 marginXX ,这样接下来的思路二也就顺理成章了。

思路二

margin有正值,也有负值,所以...

两层画布:底层全部白色;上层只有红色边框,边框宽度1dp;

上层红色边框分别设置左、右、下margin为-1dp(这里只要负值大于边框宽度即可,并且必须大于边框宽度)

代码实现:

android:bottom="-1dp"

android:left="-1dp"

android:right="-1dp"

android:top="0dp">

android:width="1dp"

android:color="#f10606" />

单边框就这样了,同理,那二边框、三边框也就简单了。

按需自取。

坑?

你以为到则里就结束了?图样图森炮!

跑一下上边思路二的代码看看效果

8329e518817b4e581a0596a4a0d3cc50.png

神马情况, stroke 里 width 的值和 item 里 left 等的值转化为像素的比例还不一样?并且不同手机分辨率效果也不同,分辨率越高越容易出现。

当然,思路二里把 item 里 left 等的负值绝对值设置比 width 大的多一些就阔以了;另外,思路一是没这个问题的。

至于原因嘛,太晚了,睡一觉再研究吧。

更多shape使用请移步这里:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐