带你玩转自定义view系列

本文详细介绍了Android中自定义View的相关知识,包括View坐标获取、画笔使用及Shader的详细讲解,如设置抗锯齿、防抖动、颜色、风格、阴影层等,并通过实例展示了不同属性的效果。此外,还探讨了Canvas的使用,如绘制点、线、形状以及画布操作如平移、旋转、缩放等,进一步解释了Path在绘制复杂图形中的作用。
摘要由CSDN通过智能技术生成
这些方法可以分成如下两个类别:

View提供的获取坐标方法:
**getTop(): **获取到的是View自身的顶边到其父布局顶边的距离
**getLeft(): **获取到的是View自身的左边到其父布局左边的距离
**getRight(): **获取到的是View自身的右边到其父布局左边的距离
**getBottom(): **获取到的是View自身的底边到其父布局顶边的距离

另外View获取自身宽高

**getHeight(): **获取View自身高度
**getWidth(): **获取View自身宽度
MotionEvent提供的方法:
**getX(): **获取点击事件距离控件左边的距离,即视图坐标
**getY(): **获取点击事件距离控件东边的距离,即视图坐标
**getRawX(): **获取点击事件距离整个屏幕左边的距离,即绝对坐标
**getRawY(): **获取点击事件距离整个屏幕顶边的距离,即绝对坐标

以上就是简单的 Android 坐标和 View 的视图坐标。

Android画笔的详解

Android提供了2D图形绘制的各种工具,如Canvas(画布)、Point(点)、Paint(画笔)、Rectangles(矩形)等,利用这些工具可以直接在界面上进行绘制。

在自定义View中,我们经常用到的Canvas(画布)和Paint(画笔),像我们画画一样,需要画布和画笔,在View中绘制控件,Canvas就代表着画布,Paint就代表着画笔。

这是的Android的的的官网里画的API:https://developer.android.com/reference/android/graphics/Paint

官网中的API有很多,下面是比较常用的一些API:

Paint.setAntiAlias(boolean flag);//设置抗锯齿效果 设置true的时边缘会将锯齿模糊化Paint.setDither(boolean flag);//设置防抖动,设置true的时图片看上去会更柔和点Paint.setColor(int color);//设置画笔颜色Paint.setARGB(int a, int r, int g, int b); //设置画笔的ARGB值Paint.setAlpha(int alpha);//设置画笔的Alpha值Paint.setStyle(); //设置画笔的style (三种:FILL填充 FILL_AND_STROKE填充加描边 STROKE描边 )Paint.setStrokeWidth(float width);//设置描边宽度Paint.setXfermode(Xfermode xfermode);//设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果Paint.setShader(Shader shader);//设置图像效果,使用Shader可以绘制出各种渐变效果Paint.setShadowLayer(float radius ,float dx,float dy,int color);//在图形下面设置阴影层,产生阴影效果,radius为阴影的半径,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色 //下面写文本的时候经常用到的Paint.setTextSize(float textSize);//设置画笔文字大小Paint.measureText(String text);//测试文本的长度Paint.setTextAlign(Paint.Align align);// CENTER(文本居中) LEFT(文本左对齐) RIGHT(文本右对齐)

下面就演示一下上面这几个API的效果。

Paint.setStye()

Paint.setStyle() //设置画笔的style,有三种:

  • Paint.Style.FILL //将填充使用此样式绘制的几何和文本,忽略绘画中与笔划相关的所有设置

  • Paint.Style.FILL_AND_STROKE //使用此样式绘制的几何和文本将同时填充和描边,尊重绘画中与笔划相关的字段

  • Paint.Style.STROKE //使用此样式绘制的几何和文本将被描边,尊重绘画上与笔划相关的字段

演示一个小demo:

paint = new Paint();       paint.setColor(Color.RED);//画笔颜色为红色       paint.setStrokeWidth(80); //描边宽度为80(为了区分效果,特意设置特别大)       float radius = 100f;       //将填充使用此样式绘制的几何和文本,忽略绘画中与笔划相关的所有设置       paint.setStyle(Paint.Style.FILL);       canvas.drawCircle(400, 200, radius, paint);       //使用此样式绘制的几何和文本将同时填充和描边,尊重绘画中与笔划相关的字段       paint.setStyle(Paint.Style.FILL_AND_STROKE);       canvas.drawCircle(400, 500, radius, paint);       //使用此样式绘制的几何和文本将被描边,尊重绘画上与笔划相关的字段       paint.setStyle(Paint.Style.STROKE);       canvas.drawCircle(400, 900, radius, paint);

结果:

image

Paint.setShader(Shader shader)

Paint.setShader(Shader shader) //设置图像效果,使用Shader可以绘制出各种渐变效果

Shader:着色器,用来给图像着色,此类是基类, Shader的API (https://developer.android.com/reference/android/graphics/Shader)。有5个子类:

  • BitmapShader

  • ComposeShader

  • LinearGradient

  • RadialGradient

  • SweepGradient

在了解上面5个类之前,先了解一下Shader.TileMode这个枚举,有三个值:

  • Shader.TileMode.CLAMP :如果着色器在其原始边界之外绘制,则复制边缘颜色

  • Shader.TileMode.MIRROR :水平和垂直重复着色器的图像,交替镜像,使相邻的图像始终接缝

  • Shader.TileMode.REPEAT :水平和垂直重复着色器的图像

BitmapShader

这里只介绍一种着色器,其余的点击阅读原文进行查看。

其实这个Shader用于绘制bitmap作为纹理,然后通

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值