千家信息网

android贝塞尔曲线如何实现波浪效果

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了android贝塞尔曲线如何实现波浪效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。因为手机录制gif不知道下什么
千家信息网最后更新 2026年11月01日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安全错误 数据库的锁怎样保障安全 咖啡豆 广州大一互联网络科技有限公司 互联网和科技创新 智能科技公司是互联网公司吗 互联网与科技金融数据 科技类互联网 紫鲸互联网科技 互联网科技视频 互联网科技公司的市场部门 互联网汽车科技小镇 智腾互联网科技有限公司 电子科技大学互联网创业大赛 互联网在线教育科技创业 广州百诚互联网科技有限公司官网 互联网科技企业商标注意事项 唯美互联网科技 互联网科技职业技能培训学校 恒生科技指数 中概互联网 河南商务圈互联网科技有限公司 武汉亿视互联网科技有限公司 百单网互联网科技有限公司怎么样 互联网科技工作委员会 金融科技与互联网金融 合肥互联网科技公司 易通互联网络科技有限公司 银川新华互联网科技学校地址 厦门比较好的科技互联网公司 互联网科技的全部知识 上海科技产业互联网平台 神州科技互联网有限公司
0