Android:视图绘制(二) ------Paint进阶

前文介绍了Paint和Canvas的一些常用方法,这里就主要介绍一下Paint的不太常用但是做一些效果又必须用到的,姑且就叫 Paint进阶。

· 阴影

Paint提供了设置阴影的功能。并提供了一系列的方法来操作阴影。

设置阴影 void setShadowLayer(float radius, float dx, float dy, int shadowColor)
清除阴影 void clearShadowLayer()
是否有阴影 boolean hasShadowLayer()

setShadowLayer 提供了四个参数用来设置阴影的颜色,偏移度及角度(我更愿意叫模糊度)

radius:模糊度 (数值越大越模糊,当为0时,不显示)
dx:水平位移
dy:垂直位移
shadowColor:颜色

mPaintText.setShadowLayer(10, 15, 15, Color.parseColor("#87CEFA"));
canvas.drawText("欢迎光临阿东的博客", 100, 300, mPaintText);
mPaintText.setShadowLayer(2, 15, 15, Color.parseColor("#87CEFA"));
canvas.drawText("欢迎光临阿东的博客", 100, 400, mPaintText);
mPaintText.setShadowLayer(0, 15, 15, Color.parseColor("#87CEFA"));
canvas.drawText("欢迎光临阿东的博客", 100, 500, mPaintText);

mPaintLine.setShadowLayer(10, 15, 15, Color.parseColor("#87CEFA"));
canvas.drawCircle(300, 700, 100,mPaintLine);

这里写图片描述

先看文字部分。当radius 越小 阴影越清晰,当radius为0时,阴影不显示。让我们看一下官方的解释

This draws a shadow layer below the main layer, with the specified offset and color, and blur radius. If radius is 0, then the shadow layer is removed.

其实就是在我们正常的文字下面加了一个图层,当radius为0的时候,移除图层。

再看下面的圆形,发现并没有画出阴影,这是因为setShadowLayer 方法在硬件加速开启与否的情况下,显示的是不一样的(硬件加速开启,执行的是另一套绘制流程,这个了解即可),在硬件加速开启的情况下,只有drawText支持。我们需要知道,自从Android4.0以后,硬件加速是默认开启的(现在网上的大部分资料都在说,需要手动开启硬件加速,是不对的。过时了)。那我们只需要关闭即可。

在view中调用 setLayerType(View.LAYER_TYPE_SOFTWARE, null) 在来看一下效果

这里写图片描述

· 线帽 (这个词总感觉怪怪的,原谅我这蹩脚的翻译)

StrokeCap,字面意思线帽,就是给线的两端加了个帽子,我们可以指定形状(当然,只能用Paint中定义好的三种)

Paint.Cap.BUTT 没有
Paint.Cap.ROUND 圆形
Paint.Cap.SQUARE 方形

 mPaintLine.setStrokeWidth(50);

 mPaintLine.setStrokeCap(Paint.Cap.BUTT);
 canvas.drawLine(100, 100, 500, 100, mPaintLine);

 mPaintLine.setStrokeCap(Paint.Cap.ROUND);
 canvas.drawLine(100, 200, 500, 200, mPaintLine);

 mPaintLine.setStrokeCap(Paint.Cap.SQUARE);
 canvas.drawLine(100, 300, 500, 300, mPaintLine);

这里写图片描述

· 连接线

StrokeJoin,用来设置连接处的样式,Paint中提供了三种选择

Paint.Join.BEVEL 斜边
Paint.Join.MITER 锐角
Paint.Join.ROUND 圆角

 mPaintLine.setStrokeJoin(Paint.Join.BEVEL);
 canvas.drawRect(100, 100, 400, 400, mPaintLine);
 canvas.drawText("Paint.Join.BEVEL", 500, 400, mPaintText);

 mPaintLine.setStrokeJoin(Paint.Join.MITER);
 canvas.drawRect(100, 500, 400, 800, mPaintLine);
 canvas.drawText("Paint.Join.MITER", 500, 800, mPaintText);

 mPaintLine.setStrokeJoin(Paint.Join.ROUND);
 canvas.drawRect(100, 900, 400, 1200, mPaintLine);
 canvas.drawText("Paint.Join.ROUND", 500, 1200, mPaintText);

这里写图片描述

当然我图上举的例子是矩形,这个可以应用到所有线条连接处。

作为Android绘图最常用的工具类,Paint还有许多其他的用法,但是大部分都需要跟别的类联合使用,之后会为大家一一讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值