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

 更新时间:2018年08月16日 09:36:06   作者:Rflyee  
这篇文章主要介绍了详解Android用Shape制作单边框图的两种思路和坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

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

效果很简单:

就以上图为例介绍,只有上边框,边框红色、宽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>

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

按需自取。

坑?

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

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

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

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

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

更多shape使用请移步这里:

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

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

相关文章

  • Android Studio导入so文件到项目中的实例详解

    Android Studio导入so文件到项目中的实例详解

    这篇文章主要介绍了Android Studio导入so文件到项目中的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Android系统优化Ninja加快编译

    Android系统优化Ninja加快编译

    这篇文章主要为大家介绍了Android系统优化使用Ninja加快编译示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 简单掌握Android Widget桌面小部件的创建步骤

    简单掌握Android Widget桌面小部件的创建步骤

    这篇文章主要介绍了简单掌握Android Widget桌面小部件的创建步骤,Widget一般采用web前端技术进行开发,需要的朋友可以参考下
    2016-03-03
  • Android自定义View实现进度条动画

    Android自定义View实现进度条动画

    这篇文章主要为大家详细介绍了Android自定义View实现进度条动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Android中的广播和广播接收器代码实例

    Android中的广播和广播接收器代码实例

    这篇文章主要介绍了Android中的广播和广播接收器代码实例,本文讲解了定义一个广播接收器、发送广播,定义好action标志、用Intent发送、注册只接收指定action的广播接收器、取消该广播接收器等操作代码实例,需要的朋友可以参考下
    2015-05-05
  • Android ViewPagerIndicator详解及实例代码

    Android ViewPagerIndicator详解及实例代码

    这篇文章主要介绍了Android ViewPagerIndicator详解及实例代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • Android中如何指定SnackBar在屏幕的位置及小问题解决

    Android中如何指定SnackBar在屏幕的位置及小问题解决

    这篇文章主要给大家介绍了关于Android中如何指定SnackBar在屏幕的位置,以及一个小问题解决的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • Android实现图片压缩示例代码

    Android实现图片压缩示例代码

    本篇文章主要介绍了Android实现图片压缩示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Android中图片占用内存的深入分析

    Android中图片占用内存的深入分析

    我们在日常开发中应该经常思考这些问题,图片占用内存跟哪些东西有关?跟手机有关系么?这篇文章主要给大家介绍了关于Android中图片占用内存的相关资料,需要的朋友可以参考下
    2022-01-01
  • Android Drawable代码编写的新姿势分享

    Android Drawable代码编写的新姿势分享

    Drawable是什么?按照字面翻译,就是可绘制的,由于能够绘制的东西很多,所以这个类是一个抽象类,下面这篇文章主要给大家介绍了关于Android Drawable代码编写的新姿势,需要的朋友可以参考下
    2022-01-01

最新评论