博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让我们荡起双桨,Android 小船波浪动画
阅读量:5958 次
发布时间:2019-06-19

本文共 1248 字,大约阅读时间需要 4 分钟。

响应公司设计德要求,需要一个小船再波浪上浮动德过渡页,不瞎bb了,效果图如下:

怎么样,效果还行把!

大体思路:

仔细观察可知,波浪为数学了正弦函数产生,小船再整个View中间,如果中间的位置处于波谷那么小船就上浮,否则就下沉,另外为了逼真,小船再中间靠右德相邻的位置的高度比中间位置德高度大,那么小船朝上,否则朝下。

关键代码:

protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!mIsRun) {
return;
}
/**
* 小船画在中间的位置
*/
for (int i = 0; i < mWidth; i++) {
if (i == 0) {
mPath.moveTo(0, mWaveRealHeight * (float) Math.sin(mAngle));
} else {
float y = mWaveRealHeight * (float) Math.sin(i * (2 * Math.PI / mDense) + mAngle);
/**
* 取中间一段取的y值,控制小船俯仰以及上下浮动
*/
if (i == mWidth / 2) {
//中间点相邻点用于判断小船是网上还是往下还是保持平衡
float deltaY5 = mWaveRealHeight * (float) Math.sin((i + mThresholdWidth) * (2 * Math.PI / mDense) + mAngle);
mMatrix.postTranslate(mBoatStartX, -y/2 + mWaveRealHeight);
if (deltaY5 > y) {
mMatrix.postRotate(mUpDownAngle, mWidth / 2, mBoat.getHeight());
} else {
mMatrix.postRotate(-mUpDownAngle, mWidth / 2, mBoat.getHeight());
}
canvas.drawBitmap(mBoat, mMatrix, mPaintBoat);
mMatrix.reset();
}
mPath.lineTo(i, y);
}
}
canvas.translate(0, mBoat.getHeight() + mWaveRealHeight);
canvas.drawPath(mPath, mPaint);
mAngle += mSpeed;
mPath.reset();
invalidate();
}

通过改变mAngle的值也就是sin函数德初相角,造成波浪上下抖动,形成波浪向左移动的假象。另外通过Matrix的postRotate(),改变图片的旋转角度,形成小船俯仰的动画,通过Matrix的postTranslate形成小船上下的动画。

,喜欢德话给个星吧!

转载地址:http://bruax.baihongyu.com/

你可能感兴趣的文章
使用xshell远程连接Linux
查看>>
杭电ACM1007
查看>>
faster-RCNN台标检测
查看>>
Unix环境高级编程 centos中配置apue编译环境
查看>>
运算符
查看>>
数据结构之各排序算法
查看>>
网页分帧操作<frameset>,<iframe>标签
查看>>
Vue生产环境部署
查看>>
酒店之王
查看>>
html5判断用户摇晃了手机(转)
查看>>
VS下Qt4.8.4安装
查看>>
Linux df命令
查看>>
redhat6.5 配置使用centos的yum源
查看>>
取得内表的数据数
查看>>
在一个程序中调用另一个程序并且传输数据到选择屏幕执行这个程序
查看>>
“=” “:=” 区别
查看>>
pwnable.kr lotto之write up
查看>>
python之UnittTest模块
查看>>
HDOJ_ACM_Rescue
查看>>
笔记纪录
查看>>