瞎找了很多资料才知道怎么绘制波浪图,看了很多博客,都是高级的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);
   
  }

引用该自定义的控件方式,记得类名写全了,要包括包名

Canvas绘制波浪图

剩下的看上面推荐的博客(Android绘制波浪线)就行了,

接下来是正文

我在(Android绘制波浪线)的基础上更改了createShader()代码,其他内容都没变,废话不多说,上实际图和代码

Canvas绘制波浪图

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

 

相关文章: