先上效果图(如果感兴趣请看后面讲解):
1、登录效果展示
2、关注效果展示
觉得文章不错的小伙伴欢迎 关注专栏Android高级进阶,我会定期分享Android知识点及解析,还会不断更新的BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿。Android高级进阶zhuanlan.zhihu.com
1、【画圆角矩形】
画图首先是onDraw方法(我会把圆代码写上,一步一步剖析): 首先在view中定义个属性:private RectF rectf = new RectF();//可以理解为,装载控件按钮的区域
rectf
2、【确定控件的大小】
上面是画圆角,那width和height怎么来呢当然是通过onMeasure;
@Override
下面以measureWidth为例:
private
3、【绘制文字text】
这里我是用自己的方式实现:当文字长度超过控件长度时,文字需要来回滚动。所以自定义控件因为你需要什么样的功能可以自己去实现(当然这个方法也是在onDraw里,为什么这么个顺序讲,目的希望我希望你能循序渐进的理解,如果你觉得onDraw方代码太杂,你可以用个方法独立出去,你可以跟作者一样用private void drawText(Canvas canvas) {}), //绘制文字的路径(文字过长时,文字来回滚动需要用到)
private Path textPath = new Path():
textRect
4、【自定义控件属性】
<?xml version="1.0" encoding="utf-8"?>
这里以,文案为例, textStr。比如你再布局种用到app:txtStr="文案内容"。在自定义控件里获取如下:
public
5、【设置点击事件,启动动画】
为了点击事件的直观,也可以把处理防止重复点击事件封装在里面
//这是我自定义登录点击的接口
6、【动画讲解】
6.1、第一个动画,矩形到正方形,以及矩形到圆角矩形(这里是2个动画,只是同时进行)
矩形到正方形(为了简化,我把源码一些其他属性去掉了,这样方便理解)
//其中 default_all_distance = (w - h) / 2;除以2是因为2遍都往中间缩短
矩形到圆角矩形。就是从一个没有圆角的变成完全圆角的矩形,当然我展示的时候只有第三个图,最后一个按钮才明显了。
其他的我直接设置成了圆角按钮,因为我把圆角做成了一个属性。
还记得onDraw里的canvas.drawRoundRect(rectf, circleAngle, circleAngle, paint);circleAngle就是圆角的半径
可以想象一下如果全是圆角,那么circleAngle会是多少,当然是height/2;没错吧,所以
因为我把圆角做成了属性obtainCircleAngle是从xml文件获取的属性,如果不设置,则为0,就没有任何圆角效果
animator_rect_to_angle
2个属性动画做好后,用 private AnimatorSet animatorSet = new AnimatorSet();把属性动画加进去,可以设置2个动画同时进行,还是先后顺序 这里是同时进行所用用with
animatorSet
6.2、变成圆形后,有一个loading加载动画
这里就是画圆弧,只是不断改变,圆弧的起始点和终点,最终呈现loading状态,也是在onDraw里
//绘制加载进度
6.3、loading状态,到打勾动画
那么这里首先要把loading动画取消,那么直接改变isLoading=false;不会只它同时启动打勾动画;打勾动画的动画,这里比较麻烦,也是我在别人自定义动画里学习的,通过PathMeasure,实现路径动画
/**
onDraw里绘制打勾动画
//绘制打勾,这是onDraw的,startDrawOk是判断是否开启打勾动画的标识
6.4、loading状态下回到失败样子(有点类似联网失败了)
之前6.1提到了矩形到圆角矩形和矩形到正方形的动画,
那么这里只是前面2个动画反过来,再加上联网失败的文案,和联网失败的背景图即刻
6.5、loading状态下启动扩散全屏动画(重点)
这里我通过loginSuccess里参数的类型启动不同效果:
1
启动扩散全屏是本文的重点,里面还涉及到了一个自定义view
CirclBigView
这个灵感也是前不久在学习微信,拖拽退出的思路里发现的。全部代码如下:
public
结束语
因为项目是把之前的功能写成了控件,所以有很多地方不完善。希望有建议的大牛和小伙伴,提示提示我,让我完善的更好。谢谢
希望读到这的您能转发分享和关注一下我,以后还会分享Android知识点及解析,您的支持就是我最大的动力!!