作者:程序员小北
链接:https://juejin.cn/post/7042468847466577957

  • 效果预览

    先来看一下这个库的实际表现吧,用起来真的很简单,而且特别的漂亮。以下效果图是在 MI 6X,Android 9 系统上的表现。不同设备实际效果可能有差异,读者请注意。

    可以看到,已经支持 View,TextView,ImageView,Button,ConstraintLayout,LinearLayout,RelativeLayout,FrameLayout,RecyclerView 控件的圆角与描边了,基本覆盖日常开发所需,一针治好设计师多年的圆角病!

    如何使用

    本项目全部使用 Kotlin 语言开发,最低支持版本为 Android 5.0。代码在 Github 和 Gitee(码云)均已经开源。读者可以点击下方链接查看更加详细的使用方法,本文只做粗略的介绍。
    Github:github.com/liqvip/Easy…
    Gitee:gitee.com/lishu1108/E…
    如果本项目帮助到了你,希望读者可以帮我点个 Star,我会更加努力搬砖的!

    第一步

    在项目根目录下的 build.gradle 中添加 jitpack 仓库

    allprojects {repositories {...maven { url 'https://jitpack.io' }}
    }

    第二步

    在对应模块的 build.gradle 中添加 EasyView 的依赖

    dependencies {...implementation 'com.github.liqvip:EasyView:1.0.0'
    }

    第三步

    在布局文件中添加需要使用的 EasyView,以下是简单示例

    <com.github.easyview.EasyImageViewandroid:layout_width="@dimen/dp_200"android:layout_height="@dimen/dp_200"app:ev_radius="@dimen/dp_100"app:ev_stroke_width="@dimen/dp_5"app:ev_stroke_color="@color/demo18"/><com.github.easyview.EasyRelativeLayoutandroid:layout_width="@dimen/dp_250"android:layout_height="@dimen/dp_150"app:ev_topLeft_radius="@dimen/dp_50"app:ev_bottomLeft_radius="@dimen/dp_20"app:ev_stroke_width="@dimen/dp_5"app:ev_stroke_color="@color/demo6"/>......

    只需三步,清清爽爽搞定所有圆角和描边。

    我为什么要写这个库

    在 Android 开发中,如果一个控件想要实现上面类似的圆角和描边效果,有如下两种最为常用的方式。

    写 xml 文件,设置圆角背景

    在 drawable 文件夹下,新建 xml 文件,通过 shape 标签来设置圆角半径,描边宽度和颜色。然后将它设置为某个具体 View 的背景即可。这种方式有明显的缺点,一旦项目比较大,不同 View 的圆角半径,描边宽度和颜色都会是不一样的,这导致的结果就是,会有大量的 xml 文件堆积在我们的项目中,后期维护成本太高。最重要的一点是,这种方式一点也不优雅

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><corners android:radius="10dp" /><solid android:color="@color/colorAccent" />
    </shape>

    使用 GradientDrawable

    这种方式和写 xml 文件来设置圆角与描边的原理都是一样的,都是通过设置 View 的背景来达到目的。区别在于 GradientDrawable 支持动态设置,这里就不举例子说明 GradientDrawable 的用法了,读者可以网上搜索相关文章,自行尝试。

    可以看到,要达到圆角与描边的效果,你都避免不了写 xml 或者大量重复无意义的代码,那么最佳的实现方式是什么呢?最佳的使用方式又是什么?带着这样的困惑,最终我完成了这个库。

    我心中的最佳实现

    编程讲究面向接口,在我看来,Android 中所有的控件,都应该具有圆角和描边的特性,但是官方控件在设计之初,就没有过多考虑过使用者的感受。实际开发中,圆角和描边的使用范围特别的广泛,我们急需要一个好的解决方案:能够直接在 xml 布局文件中直接设置圆角和描边。这对于开发者来说,特别的友好,就像使用一个个简单的属性一样,而 EasyView 也正满足甚至超越上述方案。

    那么 EasyView 这个项目内部是如何实现圆角和描边的呢?答案也很简单,核心原理就是使用 Canvas 的图像混合。对 Canvas 有研究过的的读者在阅读 EasyView 这个项目的源码时,就会轻松很多。

    由于本文主要介绍 EasyView 的使用方法,所以源码就不过多的讨论,或许过几天我会专门写一篇文章来向读者解析 EasyView 的源码,并分享一下我在开发这个项目中所遇到的各种坑。EasyView 刚发布不到一天,它还是一个充满朝气的孩子,如果你在使用过程中遇到一些问题,请务必给我提 issue

满地鸡毛的一年 || 转行Android之路相关推荐

  1. 会计转行算法之路(一)会计转程序员

    会计转行算法之路(一)会计转程序员 回忆起来,要感谢互联网,感谢开源,没有互联网,就没有我的今天,我也就无法走上自己的追梦之路. 每次迷茫的时候,回忆一下初心,我的理想是什么? 通过科学技术,改善人们 ...

  2. Android 之路30---UI基础控件

    导读 1.TextView 2.Button 3.Android各种控件的监听器 4.EditText 5.ImageView及ImageButton 6.Android 中Xml文件引用资源的方法 ...

  3. 小丑Android之路-安卓的5大布

    题记:从今天开始撸博客了,小丑决定先走一步!从基础开始学起,由此开始android之路,其实完全是被毕设逼得(兴趣?别给我提兴趣-.-),废话不多说了. android之路的开始由搭建环境开始,这个网 ...

  4. 渣硕自学两年转行Android,零经验春招拿美团30w年薪offer,HR说我是头一个!

    前言 本人为某末流211工科硕士, 找工作时,经常在网上找资料学习.面经刷题,为回馈朋友们,写下这篇分享贴,也算是对我求学生涯的总结. 说来令人感慨,我的考研之路异常曲折,每次都觉得自己能十拿九稳,结 ...

  5. Android之路-------Activity的详解

    前言 由于接近放假,公司在赶项目所以前段LP比较忙,没什么时间总结和写博客,只是准备睡觉的时候看看书,每天看的不算多,大概10多页左右吧,不过每天坚持如此的话那也是一个庞大的数字. 今天LP的任务完成 ...

  6. android 长按缩放拖动_十年Android之路面试2000人,面试准备+内部泄露核心题(中高级)...

    前言 先介绍一下自己:曾服务于东芝,东方集团,阿里,三一重工,有15年项目开发经验,熟悉汇编,java,c/c++开发语言,对系统底层,web开发和移动端开发有较深入研究.主要涉及应用层mis,erp ...

  7. 小姜的Android之路

    作者:安辉 链接:https://zhuanlan.zhihu.com/p/20810699 1.初级工程师小姜之前完全没接触过Android开发,是个应届生,他的待遇是13k,然后小姜以校招的身份进 ...

  8. (9)Android之路====Android系统OTA更新

    本次介绍Android OTA更新,AOSP官方教程的地址是:https://source.android.google.cn/devices/tech/ota/ 另外可以参考:https://blo ...

  9. 25岁文科女转行软件测试之路

    @TOC谈谈自己转行测试之路 时间很快,眨眼进入测试这行已有三个多月,刚转正不久,还是个测试小白.写这篇文章的目的主要是为了总结,也想记录分享自己转行的历程. 先说下自己的背景吧,2016年大专毕业, ...

最新文章

  1. VS2005转换工作环境
  2. 考前自学系列·计算机组成原理·补码定点加减运算和溢出判断,浮点数的加减运算,原码的乘法
  3. CPU指令集是什么东西
  4. PAT(乙级)1014
  5. 简明Vim练级攻略(转载)
  6. TortoiseSVN与VisualSVN Server搭建SVN版本控制系统【转】
  7. 智能音箱音效哪个好_华为支浩:音质好是底线,AI基本功扎实让智能音箱不再是“玩具”...
  8. sublime text3运行python不显示内容_sublime text 运行python无法出结果
  9. LInux下du, df, top, free, pstack, su, sudo, adduser, password命令
  10. 基于mint-ui的城市选择3级联动
  11. [转]可爱的 Python:: 使用 itertools 模块中的组合函数
  12. 下载 .m3u8视频文件
  13. 《东周列国志》第二十六回 歌扊扅百里认妻 获陈宝穆公证梦
  14. java 如何调用大漠插件_java通过jaboc调用dll(大漠插件)遇到的坑,变参指针传参问题...
  15. android 各个版本安全特性
  16. HTML5 CSS3初学者指南(2) – 样式化第一个网页
  17. Easy-Es核心功能深度介绍
  18. wan端口未连接怎么弄_wan口未连接是什么意思?怎么解决
  19. oracle函数(in/out)
  20. mysql in 排序 无数据混乱_mysql in查询 结果乱序 引发的思考

热门文章

  1. 中华瑰宝之山西人的面食
  2. 怎么ping IP地址,怎么ping域名
  3. 《iVX 高仿美团APP制作移动端完整项目》05 美食页商家推荐内容、分类、推荐商家制作
  4. 三相SVPWM逆变器MATLAB仿真实验,三相SVPWM逆变电路MATLAB仿真.doc
  5. 某星级酒店警卫队定岗定编项目纪实 ——完善定岗定编,转向人性化管理
  6. 速学Latex之数学公式编辑
  7. Markdown 中 LaTex 数学公式命令
  8. 编写程序,求出几何形状(长方形、正方形、圆形)的周长和面积
  9. C语言入门教程|| C语言 程序结构|| C语言 基本语法
  10. ros学习——gmapping建图