仿360手机助手下载按钮

今日科技快讯

百度将于6月1日起全面实行实名制,用户必须绑定手机完成认证,目前使用邮箱注册百度账号而没有绑定手机号的用户必须根据百度提示进行账号实名认证。此次百度账号实名认证对百度贴吧、百度网盘等方面的管理将得到进一步提高。

作者简介

本篇来自 的一幕 的投稿,分享了一个仿照360手机助手的炫酷下载按钮,感兴趣的朋友赶快来看一看吧!

的一幕 的博客地址:

http://blog.csdn.net/u010429219

正文

最近在学习Android的高级view的绘制,再结合值动画的数据上的改变,自己撸了个360手机助手的下载按钮。先看下原版的360手机助手的下载按钮是长啥样子吧:

再来看看自己demo吧,你们尽情的吐槽吧,哈哈: 

细心的朋友可能发现 loading状态 下左边几个运动圆的最高点和最低点都越界了,这是因为在规定正弦函数的最高点时没考虑圆的半径的长度,因此近两天做了点修改了,效果图如下:

细节分析步骤图

咱们的整个过程可以分为这么几个状态,在这里我用枚举类进行了归纳:

Normal(还没进行开始的状态,也就是我们的默认状态,也就是我们还没执行 onTouch 的时候了):

Start(点击 onTouch 改变为该状态):

那咱们再来看看 collectAnimator 做了些什么呢:

其实核心的就是在这个过程中改变了全局变量 currentLength 而已,此时我们回到 onDraw 里面吧,看看在 Start 状态下 currentLength 都做了些什么:

为了便于我们分析每一个状态,我们就看下每个状态下的绘制动作吧:

大家看到变量 currentLength 了没,其实这里就是去改变背景的 right 坐标,正好上面动画里面也是从 width 减小的一个值,那么此时的动画大家脑海里能想象得出来了吧: 

Start 状态结束都就是进入到 Pre 状态了: 

上面 collectAnimator 动画结束后启动的动画是: angleAnimator 了,我们再去看看该动画都做了些啥:

改变的还是全局的变量 angle,再来看看该变量在 onDraw方法 里面都做了些啥吧:

画了几个圆,然后通过上面的 angle 变量来旋转 canvas,而且几个圆的圆心都与view的中心点有关,因此大家从示例图中应该看出来了: 

pre状态 结束后,就是 Expand状态 了,大家可以看 pre状态 下动画结束的代码:

可以看出下一个动画 tranlateAnimation 了,还是一样定位到该动画的代码吧,看看都做了些啥:

可以看出此时改变的全局变量有两个: currentLength 和 translateX,想必大家知道 currentLength 是什么作用了吧,下面就来看看 onDraw 吧:

一个是改变背景的 right坐标,再个就是 canvas.translate 几个中心点的圆了:

expand状态 结束后就是正式进入到下载状态了,这里的枚举我定义是 Load, 
看下 expand 结束的动画代码吧:

大家可以看到该处有两个动画的启动了 (loadRotateAnimation.start() 和 movePointAnimation.start()),说明此处有两个动画在同时执行罢了,先来看 loadRotateAnimation 动画里面都做了些啥吧:

还是一个角度改变的动画啊,那就看看 loadAngle 是改变谁的动画吧,还是照常我们进入到 onDraw 方法吧:

还是一个圆的旋转啊,其实这几个点是有规律去绘制的,他们几个圆心应该是内圆的弧度上的,并且半径是依次增大的。这里调了 getCircleY()方法,该方法就是算圆弧上几个点的y坐标。

这里看似方法很复杂,其实就是初中定义圆的方程式:(x-cx)^2+(y-cy)^2=r^2

下面再来看看 movePointAnimation 动画都做了些啥吧:

这里首先定义了四个 MovePoint,分别定义了他们的半径,圆心,然后在该动画里面不断地改变四个 point 的圆心,其实这里核心就是如何求出四个点运行的轨迹了,把轨迹弄出来一切就都呈现出来了,可以看看该动画的 onAnimationUpdate方法 里面调用的 drawMovePoints方法:

这里就是一个数学里面经常用的正弦函数了,求出周期、x轴上的偏移量、y轴上的便宜量、顶点,还有一个注意点,该处求顶点的时候,需要减去这几个圆中的最大半径,之前我就是没注意到这点,最后出来的轨迹就是一个圆会跑到view的外面了。效果图如下: 

最后一个状态就是Complete了,也就是当前的进度到了100,可见代码:

这里要做的就是改变状态,停止一切动画了,到此代码的讲解就到这里了,赶快start起来吧。

属性也没怎么整理,就抽取出了一些比较常用的几个了:

代码使用:

好了介绍就到这里了,如果觉得行的话,进入github的传送门:

https://github.com/1002326270xc/360Downloading-master

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目名称:[精仿]360手机助手-14.2.6更新(CSkin Demo) 界面库版本号:14.2.6 最新版本 下载内容: 精仿360手机助手源码一份, 可引用至工具箱最新版CSkin.dll一份 实现功能: 1.发光标题。 2.直角边框和阴影。 3.360手机助手主界面模仿。 4.多系统支持,不需要win8系统,即可实现win8风格的360手机助手。 5.自定义控件的美化使用。 界面库更新文档: CC2014-2.6 1.修复拖动好友出现的负值BUG和拖动后有机率会消失的问题。 2.好友列表DoubleClickSubItem事件添加回调参数MouseEventArgs,用于判断鼠标操作的一些参数,如:左键双击还是右键双击判断。 3.对SkinDataGridView属性进行部分重构,颜色美化属性增加。 4.窗体加入绘制模式边框颜色属性BorderColor和InnerBorderColor 5.解决SkinTabControl left和right绘制模式下tab标签悬浮样式不变化问题。 6.所有控件采用最高质量模式绘制文字,防止字体模糊以及锯齿。 CC2013-12.8 1.优化SkinTabControl的效率,不再呢么闪烁,360DEMO直接替换DLL,改部分属性小错误,就可以看到明显闪烁减少效果。 2.为SkinStrip分类的控件添加 是否统一变换字体颜色的属性。 3.为SkinAnimatorImg动画图片框控件添加Stretch属性,是否拉伸模式绘制动画。 4.修复SkinComboBox无法DataSource绑定项的BUG。 5.增加音乐播放器,萝莉人物窗体,等DEMO。 6.修复部分细节bug。 提示:窗体继承SkinMain,再设置下SkinBack,有你想不到的惊喜哦,此窗体是用于绘制异形窗体专用,你给他什么图片,窗体就会按照图片来绘制。有一个缺点就是,有透明像素的背景区域,控件不给于显示。 CC2013-10.30 1.由于SkinForm名字太多人使用,界面库命名正式改为CSkin.dll,官网www.cskin.net。 2.SkinTabControl标签中添加菜单箭头,可点击展开菜单。 3.SkinTabControl添加标签关闭按钮。 4.修复部分中文乱码问题。 5.优化好友列表右键菜单。 6.将窗体自定义系统按钮改为集合模式,可添加无数个自定义系统按钮。自定义系统按钮事件中可以 e.参数 来判断。 7.增加360安全卫士-DEMO案例。 8.增加SkinAnimatorImg控件,用于支持位图动画的播放。如360的动态logo。 9.各种细节BUG优化。 CC2013-10.11 1.添加SkinTabControlEx,加入更加自定义的美化属性和动画效果。 2.添加SkinAnimator,通用动画控件。 3.添加Html编辑器控件 4.修复SkinButton图标和文本相对位置的BUG CC2013-9.26 1.优化好友列表CPU占用 2.好友列表加入好友登录平台属性:安卓 苹果 WEBQQ PC 3.优化标题绘制模式,新添标题绘制模式属性。 4.新添标题偏移度属性。 5.加入圆形进度条控件:ProgressIndicator。 CC2013-9.5.2 1.优化截图控件,截图工具栏加入新功能。 2.解决个人信息卡和天气窗体显示后不会消失的问题。 3.各种细节BUG优化。 CC2013-9.5.1 1.解决贴边左右隐藏的BUG。 2.解决窗体点击事件不能触发的问题。 3.优化SkinButton继承父容器背景色的代码。 4.解决SkinButton异常错误。 CC2013-9.3 1.好友列表右键菜单没反应问题。 2.新增美化控件SkinDatagridview。 3.密码软件盘回删不了文字问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值