带你玩转自定义view系列,kotlin开发微信小程序

本文深入探讨了在Kotlin中开发微信小程序自定义View的技巧,通过BitmapShader实现图像的平铺和镜像效果,并展示了如何使用Paint设置阴影层。文章还详细介绍了Canvas的各种绘制方法,包括点、线、矩形、圆弧等图形的绘制,以及平移、旋转、缩放等画布操作。此外,还讨论了Path的使用,包括moveTo、rMoveTo和setLastPoint的区别,并给出了不同Direction参数对绘制图形的影响。最后,简单提及了贝塞尔曲线的概念和PathMeasure在测量Path上的应用。
摘要由CSDN通过智能技术生成

演示一下:

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);

结果:

image

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);

结果:

image

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);

结果:

image

改一下:

paint.setShadowLayer(20,50, 50, Color.YELLOW);

结果:

image

改一下:

paint.setShadowLayer(1,50, 50, Color.YELLOW);

结果:

image

再改一下:

paint.setShadowLayer(0,50, 50, Color.YELLOW);

结果:

image

添加阴影:

paint.setColor(Color.RED);       paint.setShadowLayer(30, 0, 0, Color.BLACK);       setLayerType(LAYER_TYPE_SOFTWARE, paint);//要注意加上这句       canvas.drawCircle(400, 800, 100, paint);

**结果: **

image

常用画笔的 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);

**结果: **

image

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值