【自定义控件系列二】android画图类---Paint浅谈

来源:互联网 发布:java蓝天成都 编辑:程序博客网 时间:2024/05/19 20:42

概要:

本人在目前项目中很多页面都需要自定义控件,所以抽出时间对自定义控件进行系统的复习,并对此发表一下本人的拙见,也方便今后复习。


学习之前先看一下,这次分享最终要做的自定义控件吧,整张图除了中间的文字是TextView 其他的都是画出来的,而且圆指向柱状体顶部的箭头是

通过计算出来位置后画出来的。这个Demo我会在最后一篇文章中进行分享



好其他不多说开始这次的学习之旅吧!!!


Paint类

首先看一下Paint类官方说明

The Paint class holds the style and color information about how to draw geometries, text and bitmaps.

*如何设置几何形状文本和位图的风格和颜色时,Paint身上有这些信息可以进行设置


(一)获取Paint

Paint paint = new Paint();

(二)Paint的API


// paint恢复为默认设置。paint.reset();// 从src目录中装载一种画笔的样式paint.set(src);// 设置画笔的透明度paint.setAlpha(a);// 设置画笔的抗锯齿情况,使画笔更为圆滑paint.setAntiAlias(aa);// 设个画笔的ARGB颜色色值paint.setARGB(a, r, g, b);// 设置画笔的颜色paint.setColor(color);// 设置画笔的过滤器paint.setColorFilter(filter);// 设置清除抖动对图像的影响,会使绘制出来的图片图像更加清晰,颜色更加平滑和饱满.paint.setDither(dither);// 设置粗体文字,注意设置在小字体上效果会非常差paint.setFakeBoldText(fakeBoldText);// 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快速度显示// 注意:本设置项依赖于dither和xfermode的设置paint.setFilterBitmap(filter);// 给画笔做上标记,以便直接复用paint.setFlags(flags);// 设置画笔的隐藏模式paint.setHinting(mode);// 设置线性文本paint.setLinearText(linearText);// 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等paint.setMaskFilter(maskfilter);// 设置绘制路径的效果,如点画线等paint.setPathEffect(effect);// 设置或清除的光栅对象。// 通过空清除任何以前的光栅化。为方便起见,传递的参数也回来了。paint.setRasterizer(rasterizer);// 设置或清除渲染对象。// 通过空清以前的任何材质。为方便起见,传递的参数也回来了。paint.setShader(shader);// 这原图层下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色。如果半径为0,然后一层阴影去除。paint.setShadowLayer(radius, dx, dy, color);// 设置画笔带有删除线效果的paint.setStrikeThruText(strikeThruText);// 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式// Cap.ROUND,或方形样式Cap.SQUAREpaint.setStrokeCap(cap);// 设置笔画的倾斜度paint.setStrokeMiter(miter);// 设置画笔结合处的样式,Miter:结合处为锐角, Round:结合处为圆弧:BEVEL:结合处为直线。paint.setStrokeJoin(join);// 当画笔是空心样式时,设置画笔空心的宽度paint.setStrokeWidth(width);// 设置画笔的样式// Paint.Style.FILL(实心);// Paint.Style.STROKE(空心);// Paint.Style.FILL_AND_STROKEpaint.setStyle(Paint.Style.FILL_AND_STROKE);// 设置该项为true,将有助于文本在LCD屏幕上的显示效果paint.setSubpixelText(subpixelText);// 设置绘制文字的对齐方向paint.setTextAlign(align);// 设置文本的区域比如中文、日文等paint.setTextLocale(locale);// 设置画笔文本的缩放比例paint.setTextScaleX(scaleX);// 设置画笔文本的大小paint.setTextSize(textSize);// 设置斜体文字,skewX为倾斜弧度paint.setTextSkewX(skewX);// 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等paint.setTypeface(typeface);//设置带有下划线的文字效果 paint.setUnderlineText(underlineText);//设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果  paint.setXfermode(xfermode);

// 1.基准点是baseline// 2.ascent:是baseline之上至字符最高处的距离// 3.descent:是baseline之下至字符最低处的距离paint.ascent();paint.descent();// 清除透明阴影层。paint.clearShadowLayer();// 获取画笔透明度paint.getAlpha();// 获取画笔颜色paint.getColor();// 获取画笔过滤器paint.getColorFilter();// 获取paint.getFillPath(src, dst);// 获取该笔的标志,paint.getFlags();// 测量字体的大小paint.getFontMetrics();paint.getFontMetrics(metrics);paint.getFontMetricsInt();paint.getFontMetricsInt(fmi);// 获取字体的间距paint.getFontSpacing();// 返回画笔的隐藏模式。返回hinting_off或hinting_on。paint.getHinting();// 获取maskfilter对象paint.getMaskFilter();// 获取patheffect对象paint.getPathEffect();// 获取油漆的光栅化(或NULL)。// 光栅控制/修改/文本路径如何变成透明遮罩。paint.getRasterizer();//获取shader对象paint.getShader();//获取Cap实例控制如何开始和结束的抚摸线和路径的处理paint.getStrokeCap();paint.getStrokeJoin();//获取画笔的斜角paint.getStrokeMiter();//获取画笔宽度paint.getStrokeWidth();//返回画笔的样式paint.getStyle();//获取文本的其实位置paint.getTextAlign();//返回文字的边界paint.getTextBounds(text, index, count, bounds);paint.getTextBounds(text, start, end, bounds);//返回文字的区域paint.getTextLocale();//返回文字的路径paint.getTextPath(text, index, count, x, y, path);paint.getTextPath(text, start, end, x, y, path);//返回X轴文字的缩放paint.getTextScaleX();//返回文字的大小paint.getTextSize();//返回文字的倾斜度paint.getTextSkewX();//返回文字的宽度paint.getTextWidths(text, widths);paint.getTextWidths(text, index, count, widths);paint.getTextWidths(text, start, end, widths);paint.getTextWidths(text, start, end, widths);//设定一个最大宽度,在不超过这个宽度的话返回实际测量值,超过则停止测量paint.breakText(text, measureForwards, maxWidth, measuredWidth);paint.breakText(text, index, count, maxWidth, measuredWidth);paint.breakText(text, start, end, measureForwards, maxWidth,measuredWidth);//返回typeface对象,对文字进行字体绘制或测量文本paint.getTypeface();//返回getXfermode对象paint.getXfermode();paint.isAntiAlias();paint.isDither();paint.isFakeBoldText();paint.isFilterBitmap();paint.isLinearText();paint.isStrikeThruText();paint.isSubpixelText();paint.isUnderlineText();//对文字进行测量paint.measureText(text);paint.measureText(text, index, count);paint.measureText(text, start, end);paint.measureText(text, start, end);




0 0