墙裂推荐ShapeView<二>

前言

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

效果图要先上

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

shapeView的用法

<com.github.xwc.view.ShapeView
     android: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.ButtonShapeView
        android: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时长(毫秒)平均值
Button6766...677369.4
TextView6546...495053.7
ShapeView6054...505153.2

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

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

总结

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

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


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值