演示一下:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.flower); BitmapShader shader = new BitmapShader(bitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.MIRROR); paint.setShader(shader); canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint);
结果:
X轴用Shader.TileMode.CLAMP模式,就是用bitmap的右边缘去填充X轴的其余空间
Y轴用Shader.TileMode.MIRROR模式,就是在用相邻两张图像互为镜像的方式填充整个Y轴其余空间
接下来XY轴换一下模式:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.flower); BitmapShader shader = new BitmapShader(bitmap, BitmapShader.TileMode.MIRROR, BitmapShader.TileMode.REPEAT); paint.setShader(shader); canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint);
结果:
X轴用Shader.TileMode.MIRROR模式,就是在用相邻两张图像互为镜像的方式填充整个X轴其余空间
Y轴用Shader.TileMode.REPEAT模式,就是用相同的图像重复填充整个Y轴其余空间
其余四种着色器示例请阅读原文进行查看。
Paint.setShadowLayer(float radius ,float dx,float dy,int color)
Paint.setShadowLayer(float radius ,float dx,float dy,int color) //在图形下面设置阴影层,产生阴影效果
/** * @radius radius为阴影半径,半径越大,阴影面积越大,越模糊;反之,半径越小,阴影面积越小,也越清晰,radius=0时,阴影消失 * @dx dx为阴影在x轴上的偏移值 * @dy dy为阴影在y轴上的偏移值 * @color color为阴影的颜色 */ Paint.setShadowLayer( float radius, float dx, float dy, int color);
演示一下:
paint.setColor(Color.RED); paint.setShadowLayer(20, 0, 0, Color.YELLOW); paint.setTextSize(100); canvas.drawText(“I am Layne”, 200, 300, paint);
结果:
改一下:
paint.setShadowLayer(20,50, 50, Color.YELLOW);
结果:
改一下:
paint.setShadowLayer(1,50, 50, Color.YELLOW);
结果:
再改一下:
paint.setShadowLayer(0,50, 50, Color.YELLOW);
结果:
添加阴影:
paint.setColor(Color.RED); paint.setShadowLayer(30, 0, 0, Color.BLACK); setLayerType(LAYER_TYPE_SOFTWARE, paint);//要注意加上这句 canvas.drawCircle(400, 800, 100, paint);
**结果: **
常用画笔的 API 介绍完了
##Android画布的详解
接下来学习一下自定义View之Canvas(画布)的详解
先来看看Canvas常用方法:
| 功能分类 | Canvas常用方法 | 备注 |
| 绘制颜色 | drawARGB | 通过设置ARGB值绘制颜色 |
| drawRGB | 通过设置RGB值绘制颜色 |
| drawColor | 绘制颜色 |
| 绘制图形 | drawPoint,drawPoints | 绘制点,点集合 |
| drawLine,drawLines | 绘制线,线集合 |
| drawRect | 绘制矩形 |
| drawCircle | 绘制圆 |
| drawOval | 绘制椭圆 |
| drawArc | 绘制弧 |
| 画布操作 | translate、rotate、scale、save、restore | 依次为位移、旋转、缩放、保存画布和恢复画布 |
| drawPath | 按路径绘制 |
Canvas 绘制颜色的 API
canvas.drawARGB(int a, int r, int g, int b)canvas.drawRGB(int r, int g, int b)canvas.drawColor(int color) canvas.drawColor(int color, PorterDuff.Mode mode)
颜色的四种模式:
颜色模式 | 备注 |
---|---|
ARGB8888 | 四通道高精度(32位) |
ARGB4444 | 四通道低精度(16位) |
RGB565 | 屏幕默认模式(16位) |
Alpha8 | 仅有透明通道(8位) |
ARGB分别代表的类型:
类型 | 备注 |
---|---|
A(Alpha) | 透明度,取值范围 [0,255],0代表完全透明,255代表完全不透明 |
R(Red) | 红色,取值范围 [0,255],0代表无色,255代表红色 |
G(Green) | 绿色,取值范围 [0,255],0代表无色,255代表绿色 |
B(Blue) | 蓝色,取值范围 [0,255],0代表无色,255代表蓝色 |
从表中可以看出,ARGB的取值范围都是[0,255],其实就是16进制中的[0x00,0xff]
A从0x00到0xff对应表示从透明到不透明
RGB从0x00到0xff对应表示颜色从浅到深
示例代码:
canvas.drawARGB(0, 0, 0, 0);canvas.drawARGB(255, 255, 0, 0);canvas.drawARGB(255, 0, 255, 0);canvas.drawARGB(255, 0, 0, 255);
**结果: **
Canvas 绘制形状
canvas.drawPoint(float x, float y, Paint paint) //绘制点canvas.drawPoints( float[] pts, Paint paint) //绘制多个点canvas.drawLine(float startX, float startY, float stopX, float stopY, Paint paint) //绘制线canvas.drawLines(float[] pts, Paint paint)//绘制多条线canvas.drawRect(float left, float top, float right, float bottom, Paint pain