瞎找了很多资料才知道怎么绘制波浪图,看了很多博客,都是高级的UI绘制,可惜我连简单的都不会,只能从简单的开始
推荐两个我学习过程中找到的博客
Android绘制波浪线
https://blog.csdn.net/IT_XF/article/details/82798323
猛猛的小盆友的博客
https://juejin.im/user/5c3033ef51882524ec3a88ba/posts
由于内容过多是Android绘制波浪线的博客(进阶)写的,看完他的博客,再看我的哦
对没自定义过控件的同学提示↓
先创建控件类,继承View,比如
public class MyWaveView extends View {
public MyWaveView(Context context) {
super(context);
}
public MyWaveView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyWaveView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override //在这个方法内汇图
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
引用该自定义的控件方式,记得类名写全了,要包括包名
剩下的看上面推荐的博客(Android绘制波浪线)就行了,
接下来是正文
我在(Android绘制波浪线)的基础上更改了createShader()代码,其他内容都没变,废话不多说,上实际图和代码
private void createShader(){
//Log.i("TAG", "createShader: width:"+width+" height:"+height);
Bitmap bitmap = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
//设置画笔
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.RED);
//paint.setAntiAlias(true);
paint.setStrokeWidth(5);
paint.setStyle(Paint.Style.FILL);
Path path = new Path();
viewY = height / 2;
//Log.i(TAG, "createShader: offset "+offset);
path.moveTo(xoffset-width,viewY);//xoffset最大值为width,也就是说,当xoffset为width时,
//为path.moveTo(0,viewY)
int screenCount = 2; //这里屏幕数2就行,当path.moveTo(0,viewY)时,还有一个屏幕的波浪显示
for (int i=0;i<screenCount;i++){//两个屏幕的波浪
// rQuadTo 和 quadTo 区别在于
// rQuadTo 是相对上一个点 而 quadTo是相对于画布
// offset波浪高度
path.rQuadTo(width/4,-offset,width/2,0);
path.rQuadTo(width/4,offset,width/2,0);
}
//前面部分是画波浪线,接下来是合成波浪型
path.rLineTo(0,height);
path.rLineTo(-2*width,0);
path.close();
canvas.drawPath(path,paint);
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mPaint.setShader(bitmapShader);
}
代码下载
https://gitee.com/yunjuan_yunshu/AndroidCanvas.git