Android Canvas绘制波浪图

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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 Android Canvas 绘制网络片的示例代码: ```java public class MainActivity extends AppCompatActivity { private Bitmap mBitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化网络片 new Thread(new Runnable() { @Override public void run() { try { URL url = new URL("https://www.example.com/image.jpg"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); mBitmap = BitmapFactory.decodeStream(input); } catch (IOException e) { e.printStackTrace(); } } }).start(); // 绘制网络片 final ImageView imageView = findViewById(R.id.image_view); imageView.post(new Runnable() { @Override public void run() { Bitmap bitmap = Bitmap.createBitmap(imageView.getWidth(), imageView.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setFilterBitmap(true); Matrix matrix = new Matrix(); matrix.postScale((float) imageView.getWidth() / mBitmap.getWidth(), (float) imageView.getHeight() / mBitmap.getHeight()); canvas.drawBitmap(mBitmap, matrix, paint); imageView.setImageBitmap(bitmap); } }); } } ``` 这里使用了一个子线程来加载网络片,然后在主线程中使用 Canvas 绘制片并显示在 ImageView 中。需要注意的是,加载网络片可能会耗时较长,需要在子线程中进行。为了保证片加载完成后才进行绘制,这里使用了一个 ImageView 的 post() 方法,保证在 ImageView 绘制完成后再进行绘制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值