凌雪
2018-11-29
来源 :网络
阅读 1355
评论 0
摘要:本文将带你了解Android应用开发之Android自定义水波纹效果-升级款,希望本文对大家学Android有所帮助。
本文将带你了解Android应用开发之Android自定义水波纹效果-升级款,希望本文对大家学Android有所帮助。
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();
}
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号