前言

在此之前向大家介绍过一次ShapeView的用途和实现方式,也得到一些反馈,之后我也进行了改进。本篇做为ShapeView的第二篇,不会再对实现过程做赘述,将告诉大家我做这个控件的目的,将给你们带来什么好处。也是因为本项目已趋于完善,所以我认为有必要向大家再介绍一次

效果图要先上

正如你们看到的,ShapeView可以将您View剪裁不同的图形,并且支持手势按下抬起,不同状态变换。这个时候你们可能会问了,Android本身不是已经帮我们提供了这些功能的Api供我们使用吗。对的没错,但是按照系统的逻辑和实现过程,我们是不是应该新建一个drawable资源,然后配置View的background属性。我认为这样做是不够直观的而且过程有些繁琐。如果遇到变更,改起来还麻烦。特别是遇到一个drawable资源被2个或者多个view使用,且其中一个view的样式在版本更新的时候发生了变化,这个时候我又不能直接对这个drawable进行更改,只能另起炉灶再写一个drawable导致deawable资源文件增加,一旦这个drawable资源文件废弃的时候我还要去删,删的时候还要小心了,怕下次如果又有需要了呢。所以今天我给大家介绍一种更加轻松直观的方式去实现shape。

shapeView的用法

<com.github.xwc.view.ShapeViewandroid:id="@+id/heartShapeView"android:layout_width="150dp"android:layout_height="150dp"app:shape_borderWidth="3dp"app:shape_heart_YPercent="0.16"app:shape_heart_radian="0.2"app:shape_defaultBgd="@mipmap/image1"app:shape_pressedBgd="@mipmap/image2"app:shape_type="heart"><!-- content --></com.github.xwc.view.ShapeView>
复制代码

其中的shape_type控制剪裁的图形,每个图形都有对应的属性配置,具体详情可以查看Github,对于圆角矩形我单独抽出来了但它们两个都是继承基类shape其配置用法如下

<com.github.xwc.view.ButtonShapeViewandroid:id="@+id/buttonShape"android:layout_width="match_parent"android:layout_height="50dp"android:layout_marginTop="5dp"app:shape_borderWidth="1dp"app:shape_defaultColor="#000000"app:shape_pressedColor="#FFFFFF"app:shape_roundRect_radius="30dp"><!-- content --></com.github.xwc.view.ButtonShapeView>
复制代码

从属性配置上可以看出,非常直观清晰的告诉我们默认的颜色和按下时的颜色,以及圆角大小,不仅如此还可以配置默认和点击时的图片同时也支持加载网络资源。直接通过gradle就能使用了

compile 'com.github.xwc:ShapeView:1.2.7'
annotationProcessor 'com.github.xwc:ShapeView-compiler:1.2.5'
复制代码

由于我使用了编译时注解所以别忘记了加上annotationProcessor..这一行,加上之后并不会为您的项目引入其他的类文件,只会在您编译的时候自动生成一个工厂类类IClipPathFactory,我这样做也是为了能够使代码更加优雅,所以您可以放心大胆的使用!如果还想了解更多可以到github上下载源码

关于性能方面

对于一个自定义控件来说,性能也是一个需要考虑的问题。只有强劲的性能,才能为我们带来畅快的体验。其实我并不担心会有什么性能方面的问题,因为在实现shapeview的时候一没有高强的操作,二没有耗时的算法。所以性能方面的问题是不存在的,但是我还是做了一个简单的测试,我分别用TextView,Button和shapeView来实现同一效果,并在Activity的onResume方法记录当前时间,在onWindowFocusChanged方法记录时间差,时间差如下:

View 时长(毫秒) 平均值
Button 67 66 ... 67 73 69.4
TextView 65 46 ... 49 50 53.7
ShapeView 60 54 ... 50 51 53.2

分别记录了10次,这里解释一下为什么在onResume记录时间和在onWindowFocusChanged记录时间差。因为View的测量绘制是发生在onResume之后,这一点我相信熟悉Activity启动流程的一定知道,这些知识点我就不详细说明了。再说onWindowFocusChanged方法它的携带参数hasFocus为true的时是窗体真正的完成初始化Visible获取焦点并可交互,换而言之也可以说此时view已经绘制完毕,所以我在此记录时间差。

对比上面的表格,可以看出在它们绘制时间都差不多,没有明显的差距(ShapeView好像是最快的),由此可以得出结论:使用ShapeView和系统drawable在效率上是一样的。所以有这方面顾虑的读者不用担心,可以放心大胆的使用!

总结

ShapeView并不像那些很牛逼的开源软件一样,一定会被大家使用。它只是一个小轮子,不会让你有种冲上云霄的感觉,但是我相信在你用过之后,也会给您带来加速冲刺的推背感。

如果还有什么问题或者需求可以给我提 Issues。


短暂的交流就到这里,下次再会!

墙裂推荐ShapeView二相关推荐

  1. 【墙裂推荐】二维码生成器哪个好?

    "私域流量"是2019.2020年持续爆火的词,相信在接下来的几年还继续火下去.流量红利殆尽的当下,挖掘老用户更多的价值成为了所有公司的共识,于是私域流量的概念开始大行其道. 二维 ...

  2. python 数据分析教程推荐_太香了!墙裂推荐6个Python数据分析神器!!

    作者:东哥起飞,数据爱好者 Python数据科学 hello,大家好我是东哥! 用Python处理数据大家都不陌生了,属常规操作,但常规之下还是也有些暗藏技巧的,本篇东哥分享6个好玩高效的操作,帮助大 ...

  3. 墙裂推荐 Anaconda | 安利 Python IDE

    一.为什么安装 Anaconda? 如果你苦于给 python 安装各种包,安装过程中还各种出错.那么我墙裂推荐你!Anaconda 可以帮助你管理这些包,包括安装,卸载,更新. Anaconda 附 ...

  4. 关于文本编辑器我为什么墙裂推荐你使用Notepad++

    关于文本编辑器,我使用过好几种,比如记事本.editplus.Notepad++.emeditor.sublime text等等.每个都有它自己的特点,我也不能说哪个好或者不好,只能说自己使用起来最顺 ...

  5. 计算机图像图形设计制作 步骤,怎样在电脑上制作流程图?小编“墙裂”推荐它!...

    原标题:怎样在电脑上制作流程图?小编"墙裂"推荐它! 我们在工作生活中经常能看到各式各样的流程图.流程图主要由线条.几何图框以及文字构成,根据应用场景分为:业务流程图.数据流程图. ...

  6. 「 墙裂推荐」互联网人必备GIF制作的14种选择

    生活中可能遇到将自己的操作或者视频转换成 GIF 图分享给别人,今天墙裂推荐 14 个 GIF 制作通道,一起 mark 吧! 本文通过制作 GIF 软件.录制 GIF 软件以及在线制作 GIF 网站 ...

  7. 墙裂推荐,Python开发者不容错过的7个VS Code扩展

    Visual Studio Code(简称 VS Code)是一个由微软开发,同时支持 Windows. Linux 和 macOS 等操作系统的免费代码编辑器,它支持测试,并内置了 Git 版本控制 ...

  8. 墙裂推荐一个高质量的数据分析学习平台

    墙裂推荐一个高质量的数据分析学习平台 大家好,我是Peter呀~ 这是一篇无关任何技术的文章,主要是将近期自己写作的文章和资料进行了整理和汇总.也推荐下一个python数据分析的平台:尤而小屋 Pan ...

  9. 墙裂推荐7款办公必备软件,免费、小巧、好用

    来啦来啦! 别人1小时.你几分钟(怎么有点不对劲-)就搞定的! 这7款工作效率神器.墙裂推荐! 01.自建企业私有安全网盘 云盒子  作为公司老板: 财务报表放公有云上有泄密风险? 员工离职,没交接全 ...

最新文章

  1. amd860k能装黑苹果吗_黑苹果配置 篇六:黑苹果硬件选购指南之终篇--2019年8月
  2. 【深度学习】基于深度神经网络进行权重剪枝的算法(一)
  3. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码_转载...
  4. mixin network_【译文】Mixin——以最高的安全性满足所有区块链资产的交易需求
  5. [iOS]Unable to run app in Simulator
  6. javaweb开发的准备工作——配置篇
  7. git merge 冲突_卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!
  8. 华为发布智简全光网战略,携手上下游重新定义光产业
  9. XML学习笔记(三)
  10. mysqldump快速导数据
  11. Thrift之代码生成器Compiler原理及源码详细解析2
  12. 【原】ZenCoding中常用的CSS3样式
  13. oracle用户口令已失效
  14. 蓝桥杯 基础练习 特殊回文数 JAVA
  15. 802.11/wlan/wifi/无线相关学习资料整理
  16. 可汗学院公开课: 统计学_1 统计学基本知识、二项及泊松分布
  17. unix/linux 系统 进程资源限制参数
  18. html左右滚动div隐藏部分div,只让DIV出现横向滚动条,窗口不要有滚动条
  19. android导入音频格式,如何把音乐导入android手机?
  20. Edittext不自动获取焦点的方法

热门文章

  1. H5性能测试入门及优化建议
  2. Cocos2dx游戏教程(十五):“见缝插针”,愿你走出半生,归来仍是少年
  3. 《微型计算机原理与接口技术》复习笔记(四)
  4. 【JavaScript】实现微信发消息-解决方案
  5. 中国知网html如何复制,中国知网如何快速导出参考文献的格式? 来看看吧
  6. git强制覆盖master分支
  7. /usr/bin/ld: cannot find -lxxx的错误
  8. QA——性能优化(一)
  9. 大数据——Flink Window(窗口)机制
  10. 中止执行后超过2年_执行中止后恢复执行的期限有什么规定