这些方法可以分成如下两个类别:
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);
结果:
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作为纹理,然后通