Android实现简单水波纹效果
更新时间:2018年08月17日 10:09:04 作者:wanxiaofan
这篇文章主要为大家详细介绍了Android实现简单水波纹效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文为大家分享了Android实现水波纹效果展示的具体代码,供大家参考,具体内容如下
一、效果

二、实现原理
自定义view,使用Path和贝塞尔曲线绘制,然后不断刷新,并且改变X、Y的值
主要知识点rQuadTo的使用
三、实现
WaveView.java
public class WaveView extends View {
private Paint mPaint;
private final Path mPath;
//波长
private int wavelength = 500;
private int originY=800;
private int dx,dy;
public WaveView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
mPath = new Path();
mPaint.setColor(Color.GREEN);
mPaint.setStrokeWidth(5);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
// startanimation();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//重置path
mPath.reset();
// 改变y的起始坐标
if(dy<originY+150){
dy+=10;
}
int halfWaveLength = wavelength / 2;
mPath.moveTo(-wavelength + dx, originY-dy);
//屏幕多宽,画多少
for (int i = -wavelength; i <= getWidth() + wavelength; i += wavelength) {
/**
* 相对绘制二阶贝塞尔曲线(相对于自己的起始点--也即是上一个曲线的终点 )
* float dx1 相对于上一个曲线的终点 的距离
* float dy1
* float dx2
* float dy2
*/
mPath.rQuadTo(halfWaveLength / 2, -150, halfWaveLength, 0);
mPath.rQuadTo(halfWaveLength / 2, 150, halfWaveLength, 0);
}
//颜色填充
//画一个封闭的空间
mPath.lineTo(getWidth(), getHeight());
mPath.lineTo(0, getHeight());
mPath.close();
canvas.drawPath(mPath, mPaint);
// //设置起始点坐标
// path.moveTo(100,400);
// //二阶贝塞尔曲线1
// path.quadTo(250,200,400,400);
// //二阶贝塞尔曲线2
// path.quadTo(550,600,700,400);
// //关闭路径(将起点和终点闭合)
// path.close();
// path.moveTo(100,700);
// path.cubicTo(50,500,550,500,700,700);
}
public void startanimation() {
ValueAnimator animator = ValueAnimator.ofInt(0, wavelength);
animator.setDuration(1000);
animator.setInterpolator(new LinearInterpolator());
//无限循环
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
dx = (int) animation.getAnimatedValue();
postInvalidate();
}
});
animator.start();
}
}
最后把这个当成一个控件使用就可以。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Android中利用matrix 控制图片的旋转、缩放、移动
本篇文章是对Android中利用matrix 控制图片的旋转、缩放、移动进行了详细的分析介绍,需要的朋友参考下2013-06-06
viewPager+fragment刷新缓存fragment的方法
这篇文章主要介绍了viewPager+fragment刷新缓存fragment的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下2017-03-03
100 行代码实现Flutter自定义TabBar的示例代码
这篇文章主要介绍了100 行代码实现Flutter自定义TabBar的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09
Android 开发仿简书登录框可删除内容或显示密码框的内容
本文通过实例代码给大家分享android开发中模仿简书登录框可删除内容或显示密码框的内容,非常不错,具有参考借鉴价值,需要的朋友参考下吧2016-12-12
Android使用ContentProvider实现查看系统短信功能
这篇文章主要为大家详细介绍了Android使用ContentProvider实现查看系统短信功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-11-11
android效果TapBarMenu绘制底部导航栏的使用方式示例
本篇文章主要介绍了android效果TapBarMenu绘制底部导航栏的使用方式,具有一定的参考价值,有兴趣的可以了解一下。2017-01-01


最新评论