android贝塞尔曲线如何实现波浪效果
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍了android贝塞尔曲线如何实现波浪效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。因为手机录制gif不知道下什么
千家信息网最后更新 2025年11月07日android贝塞尔曲线如何实现波浪效果
这篇文章主要介绍了android贝塞尔曲线如何实现波浪效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
因为手机录制gif不知道下什么软件好,所以暂时就先忽略效果图了
我在屏幕外多画了1.5个波浪,延伸至屏幕内。然后不断的循环,向右边移动。就有一种波浪的效果。
所以现在只需要画出左边的波长,然后再通过循环添加所有的波长即可。
第一个曲线已经确定了控制点和终点的坐标,
第二条曲线也可以很明显的看出来终点是在x轴的0点坐标,Y轴不变,而控制点是在负的波长的1/4的位置
有了上下曲线以后,其他的就可以直接通过循环进行添加了
接下来直接看一下代码
public class WaveView extends View implements View.OnClickListener { //路径 private Path mPath; //画笔 private Paint mPaint; //屏幕高度 private int screenHeight; //屏幕宽度 private int screenWidth; //波长 自己控制 private int waveLength = 800; //波长的数量 private int waveCount; //贝塞尔曲线的控制点 private int centerY; private ValueAnimator mValueAnimator; //偏移量 private int mOffset; public WaveView(Context context) { this(context, null); } public WaveView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } private void init() { //初始化画笔 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.RED); mPath = new Path(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); screenHeight = h;// 获取屏幕高度 screenWidth = w;//获取屏幕宽度 centerY = h / 2;//设置中心点 waveCount = (int) Math.round(screenWidth / waveLength + 1.5);//波长的数量 } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPath.reset(); //首先移动到最左边 offset是偏移量 mPath.moveTo(-waveLength + mOffset, centerY); for (int i = 0; i < waveCount; i++) { //先画底部的曲线 负的波长的3/4 第二次加一个波长的长度 以及加偏移量 曲线是向下的,控制点加60 终点则为负的波长的1/2 + 波长的长度 和偏移量 mPath.quadTo(-waveLength * 3 / 4 + i * waveLength + mOffset, centerY + 60, -waveLength / 2 + i * waveLength + mOffset, centerY); //再画顶部的曲线 负的波长的1/4 曲线是向上的,控制点减60 mPath.quadTo(-waveLength * 1 / 4 + i * waveLength + mOffset, centerY - 60, 0 + i * waveLength + mOffset, centerY); } //闭合路径 mPath.lineTo(screenWidth, screenHeight); mPath.lineTo(0, screenHeight); mPath.close(); canvas.drawPath(mPath, mPaint); //设置点击时间只是为了点击以后才开始循环 setOnClickListener(this); } @Override public void onClick(View view) { //主要是为了获取偏移量 mValueAnimator = ValueAnimator.ofInt(0, waveLength); mValueAnimator.setDuration(1000); mValueAnimator.setRepeatCount(ValueAnimator.INFINITE); mValueAnimator.setInterpolator(new LinearInterpolator()); mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { mOffset = (int) valueAnimator.getAnimatedValue(); //重绘 invalidate(); } }); mValueAnimator.start(); }}感谢你能够认真阅读完这篇文章,希望小编分享的"android贝塞尔曲线如何实现波浪效果"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
波长
曲线
屏幕
控制
控制点
偏移
效果
波浪
篇文章
循环
贝塞
贝塞尔
终点
坐标
宽度
数量
是在
画笔
路径
长度
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
新建系统与数据库对接
草根小说软件开发
嘉定区网络技术开发咨询热线
湖南云众软件开发有限公司
跨数据库所有权衔接
网络安全设备选型方案
服务器销售商
服务器帧同步
中小学生护苗网络安全
网络安全口诀六字
云数据库技术演出
软件开发面试为啥这么难
幼儿园网络安全知识小报
怎么将python存到数据库
炉石传说与暴雪服务器连接
速保网络技术有限公司怎么样
龙之战怎么查看服务器
软件开发应用过程
网络安全游园活动方案
数据库短信营销方案
千峰网络安全
判断数据库是否有改动
阳江电视台网络安全
为什么要关心网络安全宣传周
数据库查询表数据个数
网络安全10大品牌
国家网络安全人才标识
rest数据库
文件版本号 数据库
php 数据库输出多选框