android待机动画,Android 忆童年 DVD机待机 loading 动画
周末逛「即刻」开到这个消息,然后心生一计,我可以自己做一个 DVD 的 loading效果啊。
什么?你不知道 DVD 是啥?呵呵,暴露年龄了。这是一个具有年代感的东西。你没看到过说明要么你年轻,年轻好啊。要么你家穷,我那会儿反正是租的碟片在同学家放,自己家买是不可能的了,一辈子都不可能。
正式开始实现之前,开始简单的建模及分析。
整体效果就是:一个圆或者矩形在一个大的矩形(类比电视屏幕)上面运动,撞到屏幕边缘就开始反弹,这里类比于光的反射。直到它成功切入一个角落,那么就停止运动。
转化一下其实就是我需要在两点连线的轨迹上面作圆或者其他图形,这两点必须满足在大的矩形的任意两边上(可以是相邻的,也可以是隔开的,单不能是同一边)。
那么对应到 Android 中就转换成两个问题,第一 如何通过已知点和角度和相关约束条件计算出另外一个点的坐标。第二 如何拿到两点相连的轨迹。
针对问题一,很明确,这里需要使用到勾股定理那些知识,或者准确的说,这里就是需要用到「正切函数」。
针对问题二,这里就需要使用到 Path 和 PathMeasure 这两个类。在 Path 中我们可以通过 moveTo() lineTo() 两个方法实现两点连线。然后调用 pathMeasure.setPath(path, false) 方式使 Path 和 PathMeasure 相关联。接着介绍 PathMeasure 一个超级厉害的方法: pathMeasure.getPosTan(distance, positionArray, tanArray) 这个方法第一个参数指定一段长度,接着传入两个数组,positionArray[2] 和 tanArray[2] 。 最后positionArray 返回的就是对应 distance 后的终点坐标,到这里,终点坐标问题解决。更厉害的是后面,给到你 X 和 Y 对应的正切值。那么我们这里需要使用的正切值就是 tanValue = Math.abs(tanArray[1] / tanArray[0])
两个大问题解决了,在讨论一些小问题,比如说运动轨迹到底有多少种?
大致就是这个情况,唉,第一次用「预览」画图,大家能看明白就好。这里具体有八种情况的轨迹。按大类分就是四大类,分别对应各个象限的情况。每个象限又有上下两种运动方向,所以就是有八大类。
轨迹有八种,但是要再具体的话,每一种又可以再拆分出一种情况。那就是上面提到的,这两点是相邻的或者是隔开的。
最后直接刚上一组代码,对应上图的相关情况。
private fun handUp() {
if (currentX == startX()) {// normal
val resultX = startX() + (currentY - startY()) / tanValue
val dx = resultX - endX()
if (resultX > endX()) {
Log.e("calculate", "上升 handUp:越界情况")
val dy = tanValue * (endX() - currentX)
path.lineTo(endX(), currentY - dy)
} else {
Log.e("calculate", "上升 handUp:正常情况")
path.lineTo(resultX, startY())
}
needRevert = dx > 0
} else if (currentX == endX()) {// normal revert
val resultX = (endY() - currentY) / tanValue
val dx = resultX - currentX
if (currentX - resultX < startX()) {
Log.e("calculate", " handUp 下降:越界情况")
path.lineTo(startX(), rectF.height() - dx * tanValue)
needRevert = true
} else {
Log.e("calculate", " handUp 下降:正常情况")
path.lineTo(currentX - resultX, rectF.height() - ovalY())
needRevert = false
}
} else {
Log.e(
"calculate",
" handUp 异常情况:currentX =$currentX startX=${startX()} endx:${endX()} startX=${startX()} endx:${endX()}"
)
animator.cancel()
state = STATE_ERROR
}
}
复制代码
最后效果就是这样的,目前支持「圆形」和「椭圆形」
android待机动画,Android 忆童年 DVD机待机 loading 动画相关推荐
- android待机动画,Android 忆童年 DVD 待机动画(补档)
image 周末逛「即刻」开到这个消息,然后心生一计,我可以自己做一个 DVD 的 loading效果啊. 什么?你不知道 DVD 是啥?呵呵,暴露年龄了.这是一个具有年代感的东西.你没看到过说明要么 ...
- Android 忆童年 DVD 待机动画
周末逛「即刻」开到这个消息,然后心生一计,我可以自己做一个 DVD 的 loading效果啊. 什么?你不知道 DVD 是啥?呵呵,暴露年龄了.这是一个具有年代感的东西.你没看到过说明要么你年轻,年轻 ...
- android刷新时的圆形动画_【Android UI】自定义圆形Loading动画
1.创建环形loading图片 android:fromDegrees="0" android:toDegrees="360" android:pivotX=& ...
- Loading动画加载素材模板,UI设计师好帮手
Loading动画,在现在的设计中已经是一个必须要设计的系统元素,它能减缓用户等待焦虑的心态,也能用来作为品牌透传,增加曝光. 火箭加载SVG动画 让我们一起深入了解Loading动画: 1.load ...
- Loading动画的最佳实现方式
点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Maturity not to see how old you, but y ...
- 【Vue+Element UI】关闭指定某一个页面的loading动画
[Vue+Element UI]关闭指定某一个页面的loading动画 模板:vue-admin-template v4.4.0 问题描述:由于vue-admin默认配置了全局loading,所以页面 ...
- 加载html动画logo,仅CSS实现的加载动画 – Loader.css
仅CSS实现的加载动画 – Loader.css 4月 13, 2015 评论 (6) Sponsor 当网页的页面大小较大,用户加载可能需要较长的时间,在这些情况下,我们一般会用到(加载)loadi ...
- 整理一些好看的loading动画
1.AVLoadingIndicatorView 简单实用的加载动画 2.LoadingDrawable 3.LoadingView 4.Android-SpinKit 5.GifLoadingVie ...
- Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路...
Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路 先看一看我的代码运行结果. 代码运行起来初始化状态: 点击开始按钮,唱片机的机械臂匀速接近唱片磁盘,同时唱片磁盘也 ...
最新文章
- hive安装mysql驱动_Hadoop-2.6.0为基础的Hive安装
- python吧_python初始与安装 - Python东
- MBA已经全面***“中国式教育”!
- Hulu诚意出品 |《百面深度学习》重磅上市
- 关于win7系统无线及本地连接图标异常的处理(可以连接无线)
- 爬虫-芒果TV-弹幕评论
- centos7 yum安装配置redis 并设置密码
- 基于django的视频点播网站开发-step9-后台视频管理功能
- Fiddler 4 - 抓包工作,只抓手机app的请求-转过来备忘
- 项目日报模板_笔杆子材料:写作技巧之如何写好日报、周报、月报(一)
- 软工课设2021-10-19会议记录
- 【Unity3D插件】DoTween插件(三)
- 明源售楼系统技术解析 签约管理(二)
- 用C#去读取陀螺仪姿态角度传感器JY61的串口数据
- C#--throw的几种抛异常方式及区别
- Go语言学习笔记-数组、切片、map
- 使用爬山法实现简单替换密码的破译
- QQ音乐远程控制,旧iPhone连音响当播放器,另一个手机远程控制
- 这五类人可以了解下蛋白粉哪个牌子好!
- 揭秘!阿里巴巴基于Transformer的推荐系统