热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android怎样画出一个好看的LoadingView~

转载请注明出处http:www.jianshu.comp55e1b5f50dee哈。。。自定义View真的不难,一些酷炫的View看着很玄乎,其实只要把自己的思路捋清晰了一步一步的

转载请注明出处http://www.jianshu.com/p/55e1b5f50dee

哈。。。自定义View真的不难, 一些酷炫的View看着很玄乎,其实只要把自己的思路捋清晰了一步一步的去做绝对能做出来,过程很痛苦但写出来了也很有成就感不是~接下来我分享的是一个自己画的看着很神奇(我反正是觉得挺神奇的 = =!)其实炒鸡简单的自定义Loading。
上效果图

《Android 怎样画出一个好看的LoadingView~》 loading.gif

下面开始说一下画这个loadingView的过程。

  • 第一步

观察一下上面的这个动图,想象下当他是静止时的样子,在纸上画画~这里我就不贴图了,我帮你们想,上下左右各一个圆并且边缘处有交集,最原始的图只有4个圆,就是这样的。上代码

for (int i = 0; i <4; i++) {
canvas.rotate(90 * i);
mPaint.setColor(colors[i]);
canvas.drawCircle(0, -((width / 2 - insideRectWidth) / 2 + insideRectWidth) + oneStepValue, threeStepValue, mPaint);
}

我们在onDraw方法里面写一个for循环,循环4次每循环1次画一个圆然后将画布旋转90°这样4个圆就画出来了。

  • 第二步

4个方位的圆已经画出来了如何让他动起来呢?
我们先看一下这行代码

canvas.rotate(twoStepValue);

意思是将画布旋转twoStepValue度,twoStepValue这个值是通过

PropertyValuesHolder twoAnimation = PropertyValuesHolder.ofInt(TWOANIM, 0, 359);

这个属性持有者来动态改变的 从0-359度,至于不到360度的原因是在圆的角度上来说 360度==0度,如果写360度就会在这个度数上重复两次,就会有那么点点的能感觉出来的卡顿。

OneStepValue= (int) animation.getAnimatedValue(ONEANIM);
twoStepValue = (int) animation.getAnimatedValue(TWOANIM);
threeStepValue = (int) animation.getAnimatedValue(THREE);
invalidate();

这里赋值完成之后刷新界面,四个方位的圆就跟着动起来了。

  • 第三步

上两步完成之后4个圆确实是动起来了,但是也只是绕着控件周围移动而不会向控件中心移动,这不是我们想要的效果,下面说下向中心移动的思路在Android中画出来的圆是由x,y坐标构成圆心加上半径组成的。。。所以呢,我们只需要更改他的y坐标就好啦是不是炒鸡简单!!!

canvas.drawCircle(0, -((width / 2 - insideRectWidth) / 2 + insideRectWidth) + oneStepValue, threeStepValue, mPaint);

x坐标永远为0,动态的改变y的坐标从而达到我们想要的效果。

  • 第四步

现在的View已经很漂亮了~不过还是可以在小小的点缀下的, threeStepValue这个变量是不是很眼熟没错,在步骤三出现过,他的本名叫半径,是一个动态的半径(这个半径是算出来的,不贴怎么算的了后面有源码)。。改变他,就会忽大忽小了

完成了~~我知道写文章要用Markdown了!确实很优雅啊又学到了新知识共同进步!加油以后我可能每周都会写点东西,嗯。。不管写的好不好我都要写,再就是希望对各位看官稍微有那么点帮助我就很开心了~

github项目链接,觉得有帮助就给个星星呗~


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
author-avatar
筷子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有