Android知识Android开发Android技术知识

Android 基础之 Paint 方法概览

2017-05-20  本文已影响171人  秀花123

Paint 类持有绘制图形、文本、图像的样式和色彩信息,并且对外提供了一系列方法来设置这些信息。

一、画笔基本操作

set(Paint src)

直接把另一个画笔的属性复制给当前画笔

reset()

恢复画笔属性为默认配置

setAntiAlias(boolean aa)

设置是否开启抗锯齿,一般在绘制棱角分明的图形比如矩形,位图时不需要开启

setDither(boolean dither)

设置是否开启图像抖动处理,会使绘制出来的图像颜色更加平滑饱满,更加清晰

setFlags(int flags)

设置一些标识,抗锯齿,防抖动等

二、画笔颜色和样式

setAlpha(int a)
setARGB(int a,int r,int g,int b)
setColor(int color))
setStyle(Paint.Style style)

设置画笔样式,有三种取值:

setStokeWidth(float width)

设置画笔宽度

setStrokeCap(Paint.Cap cap)

设置画笔笔触风格,当画笔样式为 Style.STROKE 时影响画笔始末端,有三种取值:

setStrokeJoin(Paint.Join join)

设置图形连接点的结合方式,在画矩形时会用到,三种取值:

setStrokeMiter(float meter)

设置画笔的倾斜度,取值大于0,大概是设置图形锐角的样式

三、文本相关操作

setTextAlign(Paint.Align align)

设置文本对齐方式,三种取值:

setTextLocal(Local local)

设置地理位置,比如显示中文、日文、韩文等,默认显示 Locale.getDefault() 即可

setTextScaleX (float scaleX)

设置文字水平方向的缩放因子,默认为1.0,大于1.0拉伸文字宽度,小于1.0压缩文字宽度

setTextSize(float textSize)

设置字体大小,必须大于0

setTextSkewX (float skewX)

设置文本在水平方向的倾斜,默认值为0,推荐为0.25

setTypeface(Typeface typeface)

设置字体样式,可以是 Typeface 类中的样式:

也可以用 Typeface.createFromAsset(AssetManager mgr, String path) 方法从 assets 目录中加载字体

setElegantTextHeight(boolean elegant)

设置优雅的文字高度,这个设置可能会对 FontMetrics 产生影响

setLetterSpacing(float letterSpacing)

设置行的间距,默认值是0,负值行间距会收缩

setFontFeatureSettings(String settings)

设置字体样式,可以设置 CSS 样式

setFakeBoldText (boolean fakeBoldText)

设置字体样式,可以设置 CSS 样式

setLinearText(boolean linearText)

设置是否打开线性文本标识,设置为 true 表示不需要文本缓存

setSubpixelText(boolean subpixelText)

设置亚像素,是对文本的一种优化设置,可以让文字看起来更加清晰明显,有助于文本在 LCD 屏幕上的显示效果

setUnderlineText(boolean underlineText)

设置文本的下划线

setStrikeThruText(boolean strikeThruText)

设置文本的删除线

setHinting(int mode)

设置画笔隐藏模式,可以为 HINTING_OFF 或者 HINTING_ON

四、测量文本宽高

测量文本宽度
measureText(String text)
measureText(String text, int start, int end)
measureText(char[] text, int index, int count)
measureText(CharSequence text, int start, int end)
剪切显示,大于 maxWidth 时截取指定长度显示
breakText(char[] text, int index, int count,float maxWidth, float[] measuredWidth)
breakText(CharSequence text, int start, int end, boolean measureForwards,float maxWidth, float[] measuredWidth)
breakText(String text, boolean measureForwards,float maxWidth, float[] measuredWidth)
获取指定范围内的字符宽度,保存到 widths 数组中
getTextWidths(String text, float[] widths)
getTextWidths(String text, int start, int end, float[] widths)
getTextWidths(char[] text, int index, int count,float[] widths)
getTextWidths(CharSequence text, int start, int end,float[] widths)
获取文本边界,保存到 bounds 中,可以通过这计算文本宽高
getTextBounds(String text, int start, int end, Rect bounds)
getTextBounds(char[] text, int index, int count, Rect bounds)
获取指定字体大小的字体属性
getFontMetrics()
getFontMetrics(FontMetrics metrics)
getFontMetricsInt()
getFontMetricsInt(FontMetricsInt fmi)

FontMetrics 类有五个属性:

五、图像颜色的相关操作

setFilterBitmap(boolean filter)

对位图进行滤波处理,如果该项设置为 true,则图像在动画进行中会滤掉对 Bitmap 图像的优化操作,加快显示

setColorFilter(ColorFilter filter)

设置颜色过滤,参数可以是 ColorMatrixColorFilter、LightingColorFilter 和 PorterDuffColorFilter 三个类的子类,它们都是 ColorFilter 类的子类

ColorMatrix colorMatrix = new ColorMatrix(new float[]{  
                1, 0, 0, 0, 0,  // 红色向量
                0, 1, 0, 0, 0,  // 绿色向量
                0, 0, 1, 0, 0,  // 蓝色向量
                0, 0, 0, 1, 0,  // 透明度向量
        }); 

矩阵的第一行表示 R 向量,第二行表示 G 向量,第三行表示 B 向量,第四行表示 A 向量,每一行的第一个元素表示 R 值,第二个元素表示 G 值,第三个元素表示 B 值,第四个元素表示 A 值,其取值范围为 0.0f ~ 2.0f,1.0f 表示保持原图 RGB 值,第五个元素表示偏移值,我们想让图片更偏向于哪个颜色,就增大哪个向量的偏移值。


色彩矩阵颜色过滤器的计算
setMaskFilter(MaskFilter maskFilter)

设置滤镜效果,需要传入一个 MaskFilter 参数,MaskFilter 有两个子类:

setPathEffect(PathEffect effect)

设置绘制路径的效果,PathEffect 类有六个子类:

setShader(Shader shader)

设置着色器,Shader 类有五个子类:

#####setShadowLayer(float radius, float dx, float dy, int color)
设置阴影,第一个参数为模糊半径,第二个参数为阴影离开文字的横向距离,第三个参数为阴影离开文字的纵向距离,第四个参数表示阴影颜色
#####setXfermode(Xfermode xfermode)
设置图形重叠时的显示方式,XferMode 有三个子类:
- AvoidXfermode:已过时;
- PixelXorXfermode:已过时;
- PorterDuffXfermode:构造方法:`PorterDuffXfermode(PorterDuff.Modemode)`
传入的参数是 PorterDuff.Mode 类的枚举值,共有18种取值

![PorterDuff.Mode](https://img.haomeiwen.com/i200711/5107ad6e65d913f2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
 1. PorterDuff.Mode.CLEAR:所绘制不会提交到画布上;
 2. PorterDuff.Mode.SRC:  显示上层绘制图片;
 3. PorterDuff.Mode.DST:显示下层绘制图片;
 4. PorterDuff.Mode.SRC_OVER:正常绘制显示,上层居上;
 5. PorterDuff.Mode.DST_OVER:正常绘制显示,下层居上;
 6. PorterDuff.Mode.SRC_IN:   取两层绘制交集,显示上层;
 7. PorterDuff.Mode.DST_IN:  取两层绘制交集,显示下层;
 8. PorterDuff.Mode.SRC_OUT:取上层绘制非交集部分;
 9. PorterDuff.Mode.DST_OUT:取下层绘制非交集部分;
 10. PorterDuff.Mode.SRC_ATOP:取下层非交集部分和上层交集部分;
 11. PorterDuff.Mode.DST_ATOP:取上层非交集部分和下层交集部分;
 12. PorterDuff.Mode.XOR:取上下层非交集部分;
 13. PorterDuff.Mode.DARKEN:
 14. PorterDuff.Mode.LIGHTEN:
 15. PorterDuff.Mode.MULTIPLY:
 16. PorterDuff.Mode.SCREEN:
 17. PorterDuff.Mode.OVERLAY:
 18. PorterDuff.Mode.ADD:






上一篇 下一篇

猜你喜欢

热点阅读