前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解Android用Shape制作单边框图的两种思路和坑

详解Android用Shape制作单边框图的两种思路和坑

作者头像
砸漏
发布2020-10-30 11:29:01
1.2K0
发布2020-10-30 11:29:01
举报
文章被收录于专栏:恩蓝脚本

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

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

效果很简单:

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

思路一

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

代码实现:

代码语言:javascript
复制
<?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(这里只要负值大于边框宽度即可,并且必须大于边框宽度)

代码实现:

代码语言:javascript
复制
<?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 

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

按需自取。

坑?

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

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

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

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

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

更多shape使用请移步这里:

android shape的使用详解以及常用效果(渐变色、分割线、边框、半透明阴影效果等)

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档