setColor(int)
,设置画笔的颜色
setAlpha(int)
,设置画笔的透明度
setARGB(int a, int r, int g, int b)
,设置画笔的颜色,a
代表透明度,r
,g
,b
代表颜色值
setAntiAlias(boolean)
,设置是否使用抗锯齿功能,设置后会平滑一些
setDither(boolean)
,设定是否使用图像抖动处理,设置后图像更加清晰
setStyle(Style)
,设置画笔的风格
Style.FILL
,实心Style.FILL_AND_STROKE
,同时显示实心和空心Style.STROKE
,空心示例代码
mRedPaint = new Paint();
mRedPaint.setColor(Color.RED);
mRedPaint.setStyle(Paint.Style.STROKE);
canvas.drawLine(50, 50, 400, 50, mRedPaint);
mRedPaint.setAlpha(100);
canvas.drawLine(50, 100, 400, 100, mRedPaint);
mRedPaint.setARGB(10, 255, 0, 0);
canvas.drawLine(50, 150, 400, 150, mRedPaint);
mRedPaint.setColor(Color.RED);
mRedPaint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(150, 300, 75, mRedPaint);
mRedPaint.setStyle(Paint.Style.FILL);
canvas.drawCircle(150, 500, 75, mRedPaint);
mRedPaint.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawCircle(150, 700, 75, mRedPaint);
效果如下
setStrokeWidth(int)
,设置线宽
setStrokeCap(Cap)
,设置线帽
setStrokeJoin(Join)
,设置连接
示例代码
mRedPaint.setStrokeWidth(5);
mRedPaint.setStrokeCap(Paint.Cap.BUTT);
canvas.drawLine(50, 50, 400, 50, mRedPaint);
mRedPaint.setStrokeWidth(20);
canvas.drawLine(50, 100, 400, 100, mRedPaint);
mRedPaint.setStrokeCap(Paint.Cap.ROUND);
canvas.drawLine(50, 150, 400, 150, mRedPaint);
mRedPaint.setStrokeCap(Paint.Cap.SQUARE);
canvas.drawLine(50, 200, 400, 200, mRedPaint);
mRedPaint.setStrokeCap(Paint.Cap.ROUND);
mRedPaint.setStrokeJoin(Paint.Join.MITER);
canvas.drawRect(50, 250, 400, 400, mRedPaint);
mRedPaint.setStrokeJoin(Paint.Join.ROUND);
canvas.drawRect(50, 450, 400, 600, mRedPaint);
mRedPaint.setStrokeJoin(Paint.Join.BEVEL);
canvas.drawRect(50, 650, 400, 800, mRedPaint);
效果如下
setTextSize(int)
,设置字体大小
setFakeBoldText(boolean)
,设置文本仿粗体
setUnderlineText(boolean)
,设置文字的下划线
setTextSkewX(float)
,设置斜体字,值为负右倾值为正左倾
setStrikeThruText(boolean)
,设置文本删除线
setTextScaleX(float)
,文本沿X轴水平缩放,默认值为1
setLetterSpacing(float)
,设置行的间距
setShadowLayer(float radius, float dx, float dy, int shadowColor)
,设置阴影效果,radius
为阴影角度,dx
和dy
为阴影在x轴和y轴上的距离,color
为阴影的颜色
setTypeface(Typeface)
,设置文本字体样式
setTextAlign(Paint.Align)
,设置字体方向
示例代码
final String text = "This is a text";
mRedPaint.setTextSize(50);
canvas.drawText(text, 50, 80, mRedPaint);
Paint paint = new Paint(mRedPaint);
paint.setTextSize(30);
canvas.drawText(text, 50, 120, paint);
paint = new Paint(mRedPaint);
paint.setFakeBoldText(true); // 设置文本仿粗体
canvas.drawText(text, 50, 180, paint);
paint = new Paint(mRedPaint);
paint.setUnderlineText(true); // 设置文字的下划线
canvas.drawText(text, 50, 240, paint);
paint = new Paint(mRedPaint);
paint.setTextSkewX(-0.25f); // 设置斜体字,值为负右倾值为正左倾
canvas.drawText(text, 50, 300, paint);
paint.setTextSkewX(0.25f);
canvas.drawText(text, 50, 360, paint);
paint = new Paint(mRedPaint);
paint.setStrikeThruText(true); // 设置文本删除线
canvas.drawText(text, 50, 420, paint);
paint = new Paint(mRedPaint);
paint.setTextScaleX(2); // 文本沿X轴水平缩放,默认值为1
canvas.drawText(text, 50, 480, paint);
paint = new Paint(mRedPaint);
paint.setLetterSpacing(0.1f); // 设置行的间距
canvas.drawText(text, 50, 540, paint);
paint = new Paint(mRedPaint);
paint.setShadowLayer(5, 5, 5, Color.BLACK);
canvas.drawText(text, 50, 600, paint);
paint = new Paint(mRedPaint);
paint.setTypeface(typeface); // 设置文本字体样式
canvas.drawText(text, 50, 660, paint);
paint = new Paint(mRedPaint);
paint.setTextAlign(Paint.Align.LEFT);
canvas.drawText(text, 400, 720, paint);
paint.setTextAlign(Paint.Align.RIGHT);
canvas.drawText(text, 400, 780, paint);
paint.setTextAlign(Paint.Align.CENTER);
canvas.drawText(text, 400, 840, paint);
paint.setStrokeWidth(5);
canvas.drawLine(400, 660, 400, 860, paint);
PorterDuffXfermode
是Xfermode
的子类,只有一个含参的构造方法PorterDuffXfermode(PorterDuff.Mode)
,在API DEMO里面Mode
的不同效果
但在实际中,Android为我们提供了18种
常量 | 含义 |
---|---|
ADD | 饱和相加,对图像饱和度进行相加,不常用 |
CLEAR | 清除图像 |
DARKEN | 变暗,较深的颜色覆盖较浅的颜色,若两者深浅程度相同则混合 |
DST | 只显示目标图像 |
DST_ATOP | 在源图像和目标图像相交的地方绘制【目标图像】,在不相交的地方绘制【源图像】,相交处的效果受到源图像和目标图像alpha的影响 |
DST_IN | 只在源图像和目标图像相交的地方绘制【目标图像】,绘制效果受到源图像对应地方透明度影响 |
DST_OUT | 只在源图像和目标图像不相交的地方绘制【目标图像】,在相交的地方根据源图像的alpha进行过滤,源图像完全不透明则完全过滤,完全透明则不过滤 |
DST_OVER | 将目标图像放在源图像上方 |
LIGHTEN | 变亮,与DARKEN相反,DARKEN和LIGHTEN生成的图像结果与Android对颜色值深浅的定义有关 |
MULTIPLY | 正片叠底,源图像素颜色值乘以目标图像素颜色值除以255得到混合后图像像素颜色值 |
OVERLAY | 叠加 |
SCREEN | 滤色,色调均和,保留两个图层中较白的部分,较暗的部分被遮盖 |
SRC | 只显示源图像 |
SRC_ATOP | 在源图像和目标图像相交的地方绘制【源图像】,在不相交的地方绘制【目标图像】,相交处的效果受到源图像和目标图像alpha的影响 |
SRC_IN | 只在源图像和目标图像相交的地方绘制【源图像】 |
SRC_OUT | 只在源图像和目标图像不相交的地方绘制【源图像】,相交的地方根据目标图像的对应地方的alpha进行过滤,目标图像完全不透明则完全过滤,完全透明则不过滤 |
SRC_OVER | 将源图像放在目标图像上方 |
XOR | 在源图像和目标图像相交的地方之外绘制它们,在相交的地方受到对应alpha和色值影响,如果完全不透明则相交处完全不绘制 |
setPathEffect(PathEffect)
方法为Path
设置样式。
mPaint.setAntiAlias(true);
mPaint.setColor(Color.BLACK);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(2);
// 设置样式
mPaint.setPathEffect(null);
效果如下CornerPathEffect
使路径的转角变得圆滑
CornerPathEffect(float radius)
// radius指定转角
mPaint.setPathEffect(new CornerPathEffect(25));
效果如下DashPathEffect
设置虚线路径效果
DashPathEffect(float intervals[], float phase)
// intervals[]指定虚实线长度,phase指定偏移量
mPaint.setPathEffect(new DashPathEffect(new float[]{20, 5, 10, 5}, mPhase));
效果如下PathDashPathEffect
设置路径填充的样式
PathDashPathEffect(Path shape, float advance, float phase, Style style)
// shape定义路径填充的样式,advance是每个图形之间的间距,phase指定偏移量
// style分为ROTATE、MORPH和TRANSLATE
Path path = new Path();
path.addCircle(0, 0, 3, Path.Direction.CW);
mPaint.setPathEffect(new PathDashPathEffect(path, 12, mPhase,
PathDashPathEffect.Style.ROTATE)
效果如下onDraw(Canvas)
方法里面修改偏移量mPhase
,DashPathEffect
和PathDashPathEffect
可以产生动态效果mPhase++;
invalidate();
效果如下DiscretePathEffect
使得在原来路径的基础上发生打散效果。
DiscretePathEffect(float segmentLength, float deviation)
// segmentLength指定最大的段长,deviation则为绘制时的偏离量。
mPaint.setPathEffect(new DiscretePathEffect(3.0f, 5.0f));
mPaint.setPathEffect(new DiscretePathEffect(5.0f, 3.0f));
效果如下ComposePathEffect
是组合效果,会首先将innerpe
变现出来,接着在innerpe
的基础上来增加outerpe
效果SumPathEffect
是叠加效果,在表现时会将两个参数的效果都独立的表现出来, 接着将两个效果简单的重叠在一起显示出来有些设备给paint
设置DashPathEffect
没有效果,解决方法就是,在view
层关闭硬件加速,直接在自定义View
的构造方法中调用:
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
setMaskFilter(MaskFilter)
方法用来对图像进行一定的处理,需要关闭View
的硬件加速功能
setLayerType(LAYER_TYPE_SOFTWARE, null)
BlurMaskFilter
为模糊遮罩滤镜
BlurMaskFilter(float radius, Blur style)
// radius是阴影范围,style是阴影类型
mPaint.setMaskFilter(null);
// NORMAL会将整个图像模糊掉
mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL));
// SOLID在图像边界外产生一层与Paint颜色一致的阴影效果而不影响图像本身
mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.SOLID));
// OUTER在边界外产生一层阴影且会将原本的图像变透明
mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.OUTER));
// INNER会在图像内部产生模糊
mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.INNER));
EmbossMaskFilter
为浮雕遮罩滤镜
相关文章
Android Path类
Android Paint类
Android Canvas类