美文网首页Android开发Android开发经验谈Android开发
Android用Shape制作单边框图的两种思路(和坑;附Sha

Android用Shape制作单边框图的两种思路(和坑;附Sha

作者: Rflyee | 来源:发表于2018-08-15 23:53 被阅读24次

开发中遇到单/多边框的UI,简单的可以自己写shape图,复杂的一般都让设计配合制作9patch图了。
今天不说需要切图的情况,只聊简单的单/多边框,主要是实现思路。
效果很简单:

image.png

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

思路一

  • 两层画布叠加:底层红色;上层白色;
  • 上层白色画布下移1dp。

代码实现:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--下层画布,红色-->
    <item>
        <shape>
            <solid android:color="#f10606" />
        </shape>
    </item>
    <!--下层画布,白色,向下移1dp-->
    <item android:top="1dp">
        <shape>
            <solid android:color="#ffffff" />
        </shape>
    </item>
</layer-list>

其中<item>标签的lefttoprightbottom属性可以理解为viewmarginXX,这样接下来的思路二也就顺理成章了。

思路二

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

  • 两层画布:底层全部白色;上层只有红色边框,边框宽度1dp;
  • 上层红色边框分别设置左、右、下margin为-1dp(这里只要负值大于边框宽度即可,并且必须大于边框宽度)

代码实现:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--下层画布,全白色-->
    <item>
        <shape>
            <solid android:color="#ffffff" />
        </shape>
    </item>
    <!--上层画布,红色边框,宽度1dp;左、右、下设置margin-->
    <item
        android:bottom="-1dp"
        android:left="-1dp"
        android:right="-1dp"
        android:top="0dp">
        <shape>
            <stroke
                android:width="1dp"
                android:color="#f10606" />
        </shape>
    </item>
</layer-list>

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

坑?

你以为到则里就结束了?图样图森炮!
跑一下上边思路二的代码看看效果

image.png

神马情况,strokewidth的值和itemleft等的值转化为像素的比例还不一样?并且不同手机分辨率效果也不同,分辨率越高越容易出现。
当然,思路二里把itemleft等的负值绝对值设置比width大的多一些就阔以了;另外,思路一是没这个问题的。

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

更多shape实用效果请移步这里:

更多博客,请关注

相关文章

网友评论

    本文标题:Android用Shape制作单边框图的两种思路(和坑;附Sha

    本文链接:https://www.haomeiwen.com/subject/djqgbftx.html