目标:实现一个点击删除的Item
效果图如下:我知道作为研发肯定会吐槽这个删除的设计,但是我还是要上图,不然我们岂不是不明真相的吃瓜群众…
下面我们就一步步实现这view 实现方法有很多种,这个东西不是特别难,其中涉及到一些小的计算思路和实现思路给大家分享下;
国家惯例,先看完成的效果图,
再来一个动态图吧,没GIF没真相;
但是如果要把上下层用代码实现,FrameLayout的params不如
好用,这里我选择了RL来实现这个小东西;
到此为止我们已经实现了View的80%的工作了剩下的就是提供暴漏设置名字,和删除的事件,以及让我们的上层View动起来, 剩下的事情就比较简单了,我们提供一个属性动画让上层VIew沿着X轴运动, 这里需要注意的移动的距离以及textview的联动 为什么呢?是这样的,因为我们垃圾桶的显示比例和上层View的文字控件并不是一个宽度,我们的如果不处理TextView的联动,会出现什么问题???? 没错,就是垃圾桶全部显示的时候,textview会被隐藏一部分,但是如果textview的坐标位置,和垃圾桶的宽度一致的话,在折叠状态textview太靠右边,巨丑无比……各位好好理解下,所以我们为什么一开始就提供了两个属性一个是上层icon的距离,文字的距离还有一个上层icon距离左边的距离,我们用着两个距离结合垃圾桶的距离计算出来,当垃圾桶全部展开的时候,上层icon正好完全隐藏,而且文字正好是全部展示的这个距离
说一千道一万,看代码直接,特别简单,我们拿到上层view的图片宽度,加上上层icon距离左边的距离就是这个间距
下面就是我们暴露出来的公开事件,
ok,剩下的就是点击的时候,我们需要让上层View和文字的View 联动就大功告成了
下面我们看下view的动画代码
到此这个view就分析完毕了,这里还有一个知识点给大家分享下,外面提供的设置文字内容和暴漏的事件的方法,如果直接调用是不会生效的,假如我们不在view内部处理一些东西的话, 大家都知道,我们findViewByID后直接获取view的宽高,是不是获取不到,都是0, 那是因为,但是我们要是写一个延时,5秒再获取宽高就能获取到了,所以我们难道要这样处理吗,那肯定不行啊,他自己处理完毕后会在一个生命周期中通知我们的,就是他会告诉activity,我OK了你可以来获取我的宽高了,想必大家都知道这个方法吧,
就是他,这就是为什么我们提供的设置内容的方法,只是记录了外界提供的值,并没直接调用 textview.settext(),如果直接后面加上这一句会发生事情,大家肯定都知道的,
直接就crash了,textview是null,这块要注意下,于是我们改成这样的写法
好了最后一个坑也填平了,虽然这个view没有很炫酷的动画 ,但是也没有很高深的源码分析, 不要感觉啥都没学到,这样的轮子网上多的去了,自己造的轮子,能填补一些知识忙点!
由于微信对于代码支持不是很友好,非常大段的完整代码我就不在这里粘贴了,想要源码的或者查看的去原作者博客浏览即可。
源代码下载地,工程项目地址,希望大家star一下,谢谢:https://github.com/GuoFeilong/ATLoginButton_New