当前位置: 移动技术网 > 移动技术>移动开发>Android > Android自定义水波纹效果-升级款

Android自定义水波纹效果-升级款

2018年12月10日  | 移动技术网移动技术  | 我要评论
public class waveview1 extends view {
//波浪画笔
private paint mpaint1;
private paint mpaint2;
private paint mpaint3;
//波浪path类
private path mpath1;
private path mpath2;
private path mpath3;
//一个波浪长度
private int mwavelength = 1000;
//波纹个数
private int mwavecount;
//平移偏移量
private int moffset;
//波纹的中间轴
private int mcentery;
//屏幕高度
private int mscreenheight;
//屏幕宽度
private int mscreenwidth;
private float xoff;
private float yoff;
private float height;
public waveview1(context context, attributeset attrs) {
super(context, attrs);
xoff = androidutils.dp2px(getcontext(), 20);
yoff = androidutils.dp2px(getcontext(), 5);
height = androidutils.dp2px(getcontext(), 15);
mpath1 = new path();
mpath2 = new path();
mpath3 = new path();
mpaint1 = new paint(paint.anti_alias_flag);
mpaint1.setcolor(contextcompat.getcolor(context, r.color.color_4dffffff));
mpaint1.setstyle(paint.style.fill_and_stroke);
mpaint2 = new paint(paint.anti_alias_flag);
mpaint2.setcolor(contextcompat.getcolor(context, r.color.color_81ffffff));
mpaint2.setstyle(paint.style.fill_and_stroke);
mpaint3 = new paint(paint.anti_alias_flag);
mpaint3.setcolor(color.white);
mpaint3.setstyle(paint.style.fill_and_stroke);
}
@override
protected void onsizechanged(int w, int h, int oldw, int oldh) {
super.onsizechanged(w, h, oldw, oldh);
mscreenheight = h;
mscreenwidth = w;
//加1.5:至少保证波纹有2个,至少2个才能实现平移效果
mwavecount = (int) math.round(mscreenwidth / mwavelength + 1.5);
mcentery = mscreenheight / 2;
}
@override
protected void ondraw(canvas canvas) {
super.ondraw(canvas);
mpath1.reset();
mpath2.reset();
mpath3.reset();
//移到屏幕外最左边
mpath1.moveto(-mwavelength + moffset, mcentery);
mpath2.moveto(-mwavelength + moffset, mcentery + yoff);
mpath3.moveto(-mwavelength + moffset, mcentery + 2 * yoff);
for (int i = 0; i < mwavecount; i++) {
//正弦曲线1
mpath1.quadto((-mwavelength * 3 / 4) + (i * mwavelength) + moffset + xoff, mcentery + height, (-mwavelength / 2) + (i * mwavelength) + moffset + xoff, mcentery);
mpath1.quadto((-mwavelength / 4) + (i * mwavelength) + moffset + xoff, mcentery - height, i * mwavelength + moffset + xoff, mcentery);
//正弦曲线2
mpath2.quadto((-mwavelength * 3 / 4) + (i * mwavelength) + moffset + 2 * xoff, mcentery + yoff + height, (-mwavelength / 2) + (i * mwavelength) + moffset + 2 * xoff, mcentery + yoff);
mpath2.quadto((-mwavelength / 4) + (i * mwavelength) + moffset + 2 * xoff, mcentery + yoff - height, i * mwavelength + moffset + 2 * xoff, mcentery + yoff);
//正弦曲线3
mpath3.quadto((-mwavelength * 3 / 4) + (i * mwavelength) + moffset + 3 * xoff, mcentery + 2 * yoff + height, (-mwavelength / 2) + (i * mwavelength) + moffset + 3 * xoff, mcentery + 2 * yoff);
mpath3.quadto((-mwavelength / 4) + (i * mwavelength) + moffset + 3 * xoff, mcentery + 2 * yoff - height, i * mwavelength + moffset + 3 * xoff, mcentery + 2 * yoff);
}
//填充矩形
mpath1.lineto(mscreenwidth, mscreenheight);
mpath1.lineto(0, mscreenheight);
mpath2.lineto(mscreenwidth, mscreenheight);
mpath2.lineto(0, mscreenheight);
mpath3.lineto(mscreenwidth, mscreenheight);
mpath3.lineto(0, mscreenheight);
//mpath.close();
canvas.drawpath(mpath1, mpaint1);
canvas.drawpath(mpath2, mpaint2);
canvas.drawpath(mpath3, mpaint3);
}
valueanimator animator = valueanimator.ofint(0, mwavelength);
public void startanim() {
animator.setduration(5000);
animator.setrepeatcount(valueanimator.infinite);
animator.setinterpolator(new linearinterpolator());
animator.addupdatelistener(new valueanimator.animatorupdatelistener() {
@override
public void onanimationupdate(valueanimator animation) {
moffset = (int) animation.getanimatedvalue();
postinvalidate();
}
});
animator.start();
}
public void stopanimate() {
if (animator != null) {
animator.pause();
}
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网