android贝塞尔曲线如何实现波浪效果
发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,这篇文章主要介绍了android贝塞尔曲线如何实现波浪效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。因为手机录制gif不知道下什么
千家信息网最后更新 2025年01月30日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安全错误
数据库的锁怎样保障安全
美团优选出现服务器错误
开展网络安全活动手抄报
软件开发一般用什么语言
软件开发薪资多少
北京唱游天下网络技术有限公司
数据库sybase图 叫什么
数据库系统原理范式例题
深圳市拉普拉斯网络技术
深圳市橙社网络技术有限公
断点续传服务器
sw安装提示协作服务器
传奇服务器设置教学
万德数据库功能pdf
华为服务器进系统界面黑屏
网络安全宣传视频口播速度
软件开发企业税收筹划
淮安网络营销软件开发来电咨询
平谷区专业软件开发口碑推荐
张店hr人力资源软件开发公司
怎么知道自己的数据库名字
作为个人怎么样维护网络安全
ip时区数据库
服务器能用其他电脑上网吗
深圳港湾网络技术
软件开发 弘成科技
北京市公安局网络安全专家陈
系统内数据库表名如何修改
软件开发监督和检查
网络安全设计实现
网络安全法 未授权