Android绘制(三):Path结合属性动画, 让图标动起来!
Android绘制(一):来用shape绘出想要的图形吧!
Android绘制(二):来用Path绘出想要的图形吧!
目录
- 效果图
- 前言
- 绘制
- 属性动画
- 最后
效果图
不废话, 直接上效果图, 感兴趣再看下去. 其实不单单是效果图演示的, 运用熟练的话各种图标之间都是可以切换的.
前言
之前的文章也说了, path还是很有潜力的. 但是很遗憾, 我本人不太擅长用贝塞尔曲线画东西, 所以只能演示一些简单的变化(手动无奈). 来看看是如何实现的吧.
绘制
想要绘制矩形很简单啦, 移动到左上角, 然后逆时针画一圈, 或者顺时针画一圈. 那其实暂停和终止就是两个矩形, 播放就是两个三角形. 所以稍微改变下path绘制的位置就解决问题啦.
mLPath.moveTo(left, top); mLPath.lineTo(left, bottom); mLPath.lineTo(right, bottom); mLPath.lineTo(right, top); mLPath.close();
但是需要弄清绘制区域. 首先要测出设定视图宽高, 再以此画一个圆, 然后设置一个内边距, 然后再绘制图标. 来张图:
属性动画
其实这里的属性动画的使用部分是最简单的使用, 就是值变化, 从0到1或者从1到0.
ValueAnimator valueAnimator = ValueAnimator.ofFloat(isPlaying ? 1 : 0, isPlaying ? 0 : 1); valueAnimator.setDuration(mAnimDuration); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { mProgress = (float) animation.getAnimatedValue(); invalidate(); } });
然后依据mProgress的值变化图形. 那要怎么构建这个变化呢? 注意看我的注释部分, 变化的值就那几个, 你将0时的值和1时的值先写好, 然后推算函数, 就是初中数学的难度, 大概(天知道现在小学生变成什么样了)(手动滑稽).
// 暂停间距(0: mMidSpace 1: 0) float pauseDis = mMidSpace * (1 - mProgress); // 暂停单条宽(0: mRectWidth / 3 1: mRectWidth / 2) float pauseWidth = (mRectWidth - pauseDis) / 2; // 左暂停左上(0: 0 1: mRectWidth / 2) float pauseLLT = pauseWidth * mProgress; // 右暂停左上(0: mRectWidth / 3 * 2 1: mRectWidth / 2) float pauseRLT = pauseWidth + pauseDis; // 右暂停右上(0: mRectWidth 1: mRectWidth) float pauseRRT = pauseWidth * 2 + pauseDis; // 右暂停右下(0: mRectWidth 1: mRectWidth / 2) float pauseRRB = pauseRRT - pauseWidth * mProgress;
最后
之后实现应该都不太难了, 不管是监听还是自定义属性. 那自定义视图可以看这篇-界面无小事(五):自定义TextView, 属性动画可以看这篇-动画必须有(一): 属性动画浅谈. 当然了, 要是前一篇没看的, 建议看下Android绘制(二):来用Path绘出想要的图形吧!. 喜欢记得点赞哦, 有意见或者建议评论区见, 暗中关注我也是可以的哦~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android 开发小知识点收集(随时更新)
1、获取手机运行时最大可占用内存 int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); Log.d("TAG", "Max memory is " + maxMemory + "KB"); 2、改变dialog 在不同窗口内显示不同的大小 //在dialog.show()之后调用 public static void setDialogWindowAttr(Dialog dlg,Context ctx){ Window window = dlg.getWindow(); WindowManager.LayoutParams lp = window.getAttributes(); lp.gravity = Gravity.CENTER; lp.width = LayoutParams.MATH_PARENT;//宽高可设置具体大小 lp.height = LayoutParams.MATH_PARENT; dlg.getWindow().setAttributes(lp); } 摘抄自:简书——MrRock 3...
- 下一篇
【教你赚钱】Android 工程师如何走向独立开发
说到独立开发者,大家想到的都是 iOS 的良好生态,培养了一批愿意付费的用户,也让一部分 iOS 独立开发者赚到了钱。然而,也有一些 Android 开发者,找到了正确的方向,从 Android 起家,赚到了七位数甚至八位数。这篇文章,我们来说说,安卓开发者如何找到独立开发之道。 靠量取胜的生意 2017 年,安卓手机的用户占比高达 87%,无论看国内还是全球,用户量都是以十亿为单位的。所以说,想靠独立开发安卓应用赚钱,一定要把用户量做足,让庞大的市场体量帮你赚钱。 由于安卓系统碎片化严重,市面上售卖的各种类型的安卓机、厂商定制系统也是良莠不齐,造成安卓用户普遍对应用质量的预期较低、付费意愿也较低这种情况。针对这种情况,我们能做的两件事情是: 初期为了节约开发成本,没必要强推设计规范。如果是给 iOS 版应用做安卓版,大可直接模仿 iOS 版 App 的样式,如果是直接开发 Android App,只需做到界面整体美观、简洁,完全遵循 Google 推行的 Material Design,如果让你耗费了过多的时间,大可不必强求。 除非有用户反应希望提供类似付费去广告的功能,基本上可以考...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果