Paint 使用

来源:互联网 发布:mac os x 10.12 beta5 编辑:程序博客网 时间:2024/05/21 09:13

Paint 用法

先申明一下,这个只是自己想对paint有个整体滴认识,所以才整理出来滴,里面的链接其实都是同一个, 比较难滴地方,都是参考这个大神滴文章来进行滴。。。
看到这里,已经实现了引流,哈哈哈,你们可以去看大神滴文章了。

1. 关于text的方法

1.1 ascent(都是直接翻译滴,其实就是返回到基线的距离)

//根据当前的字体和文字大小返回上方(负)基线(上升)的距离。float   ascent() 

1.2 descent

//根据当前的字体和文字大小,返回下方(正)基线(下降)的距离。float   descent() 

1.3 breakText

1.3.1

//maxWidth 表示 可接受的最大长度,返回的int表示绘制了多少个字符,measureWidth是我们自己设置进去的,他的值表示绘制的这几个字符的实际宽度.后面有代码颜色int breakText(char[] text, int index, int count, float maxWidth, float[] measuredWidth)

1.3.2

//测量文本,如果测量的宽度超过maxWidth,则提早停止。// measureForwards 如果为true,则向前测量,从字符串中的第一个字符开始。 否则,向后测量,从字符串中的最后一个字符开始。int breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth)

代码演示

paint.setTextSize(50);String str = "AABBCCDDEEFF";float[] f= new float[1];int width = paint.breakText(str, true, 200, f);Log.i(TAG, "WIDTH = " + width + " ---str--- = " + str.length() + "---realWidth---" + f[0]);//将结果打印出来 WIDTH = 6 ---str--- = 12---realWidth---194.0

1.3.3

//同上int breakText(CharSequence text, int start, int end, boolean measureForwards, float maxWidth, float[] measuredWidth)

1.4 FontFeatureSettings

1.4.1 getFontFeatureSettings具体指参考

//返回字体设置。 具体值参考String  getFontFeatureSettings()

1.4.2 setFontFeatureSettings

void    setFontFeatureSettings(String settings) 

1.5 FontMetrics(Metrics 文字与基线的几个值得包装类)

1.5.1 getFontMetrics

//返回字体的推荐行间距,给出paint的字体,文字大小等的设置。float  getFontMetrics(Paint.FontMetrics metrics)

1.5.2 getFontMetrics

//返回metrics对象Paint.FontMetrics   getFontMetrics()

1.5.3 getFontMetricsInt

//返回字体的行间距,给出Paint的字体设置,textSize等int getFontMetricsInt(Paint.FontMetricsInt fmi)

1.6 getFontSpacing

根据当前的字体和文字大小返回推荐行间距。float   getFontSpacing()

1.7 getFontVariationSettings(后续更新)

1.7.1

//返回字体变体设置。 api26以上 (没试过)String  getFontVariationSettings()

1.7.2

//api26以上  不清楚有什么作用boolean setFontVariationSettings(String fontVariationSettings) 

1.8 LetterSpacing

1.8.1

//返回文字间距。float   getLetterSpacing()

1.8.2

//为文本设置paint的字母间距。void    setLetterSpacing(float letterSpacing)

1.9 OffsetForAdvance

1.9.1 getOffsetForAdvance

//获取位置最接近指定水平位置的字符串中的字符偏移量。int getOffsetForAdvance(char[] text, int start, int end, int contextStart, int contextEnd, boolean isRtl, float advance)

1.9.2 getOffsetForAdvance

//同上int getOffsetForAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, float advance)

1.10 RunAdvance

1.10.1

//在文本运行中测量光标位置。float   getRunAdvance(char[] text, int start, int end, int contextStart,int contextEnd, boolean isRtl, int offset)

1.10.2

//同上float   getRunAdvance(CharSequence text, int start, int end,int contextStart, int contextEnd, boolean isRtl, int offset)

1.11 TextAlign

1.11.1

//返回字体对齐方式Paint.Align get TextAlign()

1.11.2

void    setTextAlign(Paint.Align align)

1.12 TextBounds

1.12.1

//获取文本的宽高,通过bounds的Rect拿到整型。void    getTextBounds(String text, int start, int end, Rect bounds)

1.12.2

//同上void    getTextBounds(char[] text, int index, int count, Rect bounds)

1.13 TextLocale

1.13.1 getTextLocale

//获取当前文本的区域Locale  getTextLocale()

1.13.2 setTextLocale

//设置文本的区域,比如中文,英文,一般用Local.getDefault();void setTextLocale(Locale locale) 

1.13.3

//api 24以上 还未测试LocaleList  getTextLocales() 

1.13.4

//api 24以上 还未测试void    setTextLocales(LocaleList locales) 

1.16 TextPath

1.16.1

//返回指定文本的路径(轮廓)。void    getTextPath(char[] text, int index, int count, float x, float y, Path path)

1.16.2

//同上void    getTextPath(String text, int start, int end, float x, float y, Path path)

代码解析

//注意要电泳path.close();Path path = new Path();paint.getTextPath("ABCDEFgh", 0, "ABCDEFgh".length(), 100,400, path);path.close();paint.setStrokeWidth(5);canvas.drawPath(path, paint);

1.17 TextScaleX

1.17.1

//返回在水平方向的比例 默认是1float   getTextScaleX()

1.17.2

void    setTextScaleX(float scaleX)

1.18 TextSize

1.18.1

//Text的字体大小float   getTextSize()

1.18.2

void    setTextSize(float textSize)

1.19 TextSkewX

1.19.1

//获取水平偏移float   getTextSkewX()

1.19.2

void    setTextSkewX(float skewX)

1.20 TextWidths

1.20.1

//返回字符串中字符的宽度。int getTextWidths(char[] text, int index, int count, float[] widths)

1.20.2

//同上int getTextWidths(String text, float[] widths)

1.20.3

//同上int getTextWidths(String text, int start, int end, float[] widths)

1.20.4

//同上int getTextWidths(CharSequence text, int start, int end, float[] widths)

代码解析

 String str1 = "ABCab分机";float[] widths = new float[str1.length()];int num = paint.getTextWidths(str1, 0,str1.length(),  widths);canvas.drawPaint(paint);for (float num1: widths){    Log.i(TAG, "WIDTH = " + num  + "---realWidth---" + num1);}//log//WIDTH = 7---realWidth---8.0//WIDTH = 7---realWidth---7.0//WIDTH = 7---realWidth---8.0//WIDTH = 7---realWidth---7.0//WIDTH = 7---realWidth---7.0//WIDTH = 7---realWidth---12.0//WIDTH = 7---realWidth---12.0

1.21 Typeface

1.21.1

//获取paint的字体对象。默认有四种实现//BOLD(加粗)、BOLD_ITALIC(加粗并倾斜)、ITALIC(倾斜)、NORMAL(正常)Typeface    getTypeface()

1.21.2

Typeface    setTypeface(Typeface typeface)

1.22 hasGlyph

//确定paint上设置的字体是否具有支持字符串的字形。boolean hasGlyph(String string)

1.23 measureText

1.23.1

//获取文字的宽度float   measureText(char[] text, int index, int count)

1.23.2

//同上float   measureText(CharSequence text, int start, int end)

1.23.3

//同上float   measureText(String text, int start, int end)

1.23.4

//同上float   measureText(String text)

1.24 FakeBoldText

1.24.1

//获取与设置文本是否仿粗体final boolean   isFakeBoldText()

1.24.2

//获取与设置文本是否仿粗体,小字体设置效果非常差。void    setFakeBoldText(boolean fakeBoldText)

1.25 ElegantTextHeight(目前不清楚什么作用,后续更新)

1.25.1

boolean    isElegantTextHeight()

1.25.2

void    setElegantTextHeight(boolean elegant)

1.26 LinearText

1.26.1

//getFlags()的帮助器,如果设置了LINEAR_TEXT_FLAG位,则返回true//直接翻译的官方文档。。。不太清楚怎么用,看到一个大神的解释是获取与设置是否打开线性文本标识。因为默认Android中文本绘制需要使用一个Bitmap作为单个字符缓存,因此会使用一定的空间,为了不使用该空间则设为true即可。final boolean   isLinearText()

1.26.2

//帮助setFlags(),设置或清除LINEAR_TEXT_FLAG位void    setLinearText(boolean linearText)

1.27 trikeThruText

1.27.1

//删除线final boolean   isStrikeThruText()

1.27.2

//设置是否有删除线void    setStrikeThruText(boolean strikeThruText)

1.28 SubpixelText

1.28.1

//不明白这是什么,有人说是在LCD屏幕显示有比较好的效果final boolean   isSubpixelText()

1.28.2

void    setSubpixelText(boolean subpixelText)

1.29 UnderlineText

1.29.1

//下划线final boolean   isUnderlineText()

1.29.2

void    setUnderlineText(boolean underlineText)

2. 关于paint的方法(感觉可以称为通用方法,比如颜色设置什么滴)

2.1 Alpha

2.1.1

int getAlpha()

2.1.2

void    setAlpha(int a)

2.2 Color

2.2.1

int getColor()

2.2.2

void    setColor(int color)

2.2.3

void    setARGB(int a, int r, int g, int b)

2.2.4 (听说是很强大很强大很强大滴东西,不过需要ColorMatrix来支持,所以先去看看Matrix吧,这样才能更好理解,反正我是准备去看了 xiaokulian)
请跟着大神滴角步走

//获取颜色过滤器(可能为null)。ColorFilter getColorFilter()

2.2.5

//设置或清除paint的颜色过滤器,返回参数。听说很重要,等下再分析ColorFilter setColorFilter(ColorFilter filter)

2.3 Flags

2.3.1

//Return the paint's flags.int getFlags()

2.3.2

void    setFlags(int flags)

2.4 Hinting

2.4.1

//返回paint的模式。 返回HINTING_OFF或HINTING_ON。//官方直译,不知道什么效果。。。。int getHinting()

2.4.2

void    setHinting(int mode)

2.5 MaskFilter

骚年,赶紧走吧走吧,不要留着这里,这里不适合你
2.5.1

//获取paint的maskfilter对象。MaskFilter  getMaskFilter()

2.5.2

//设置或清除maskfilter对象。MaskFilter  setMaskFilter(MaskFilter maskfilter)

2.6 StrokeWidth

2.6.1

// 返回线的宽度 比如 画一个空心圆, 就是返回空心圆的线条宽度float   getStrokeWidth()

2.6.2

void    setStrokeWidth(float width)

2.7 Style

2.7.1

//设置填充的模式Paint.Style getStyle()

2.7.2

void    setStyle(Paint.Style style)

2.8 StrokeMiter(没搞明白)

2.8.1

// 获取画笔的倾斜度???float   getStrokeMiter()

2.8.2

// 设置画笔的倾斜度void    setStrokeMiter(float miter)

2.9 Xfermode(这个有点复杂,不过跟着官方文档看,就比较清晰了,用的时候查文档)

文档地址
2.9.1

Xfermode    getXfermode()

2.9.2

Xfermode    setXfermode(Xfermode xfermode)

2.10 AntiAlias

2.10.1

//是否打开抗锯齿 默认是没打开,一般情况下需要打开final boolean   isAntiAlias()

2.10.2

void    setAntiAlias(boolean aa)

2.11 Dither

2.11.1

//获取与设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满、图像更加清晰。final boolean   isDither()

2.11.2

void    setDither(boolean dither)

2.12 FilterBitmap(不懂,没用过。。。)

2.12.1

//位图过滤器是否被激活。final boolean   isFilterBitmap()

2.12.2

void    setFilterBitmap(boolean filter)

2.13 reset

//重置void    reset()

2.14 set(Paint src)

//利用另外一个paint来设置这个paintvoid    set(Paint src)

2.15 Shader

这个比较重要,比如平铺,镜像翻转什么的 都可以用这个实现
具体的看这里
2.15.1

Shader  getShader()

2.15.2

Shader  setShader(Shader shader)

2.16 ShaderLayer(设置阴影)

2.16.1

//这将在主层下面绘制一个阴影层,具有指定的偏移和颜色以及模糊半径。void    setShadowLayer(float radius, float dx, float dy, int shadowColor)

2.16.2

void    clearShadowLayer() // 清除阴影扩散效果

2.17 StrokeCap(不太明白,可以去大神滴文章看看,反正目前我还没有弄清楚)

2.17.1

Paint.Cap   getStrokeCap()

2.17.2

void    setStrokeCap(Paint.Cap cap)

2.18 StrokeJoin

2.18.1

//获取与设置画笔画线等连接处的轮廓样式//三种样式 Join.MITER  Join.ROUND, Join.BEVELPaint.Join  getStrokeJoin()

2.18.2

void    setStrokeJoin(Paint.Join join)

2.19 getFillPath

//将任何/全部效果(patheffect,抚摸)应用于src,将结果返回到dst(这一段来自google翻译)//我的理解就是将src的属性复制到dst里面,是的dst在几何视角上与src有一样的展示boolean getFillPath(Path src, Path dst)

2.20 PathEffect (设置路径绘制效果,有好几种模式)

详解看这里
2.20.1

//获取paint的patheffect对象。PathEffect  getPathEffect()

2.20.2

//设置或清除patheffect对象。PathEffect  setPathEffect(PathEffect effect)

3.常量(都是tm什么鬼哟,就用过几个,好吧我承认都是google翻译的)

3.1 ANTI_ALIAS_FLAG 抗锯齿标志
3.2 DITHER_FLAG 启用此标志会对目标的颜色空间比源更受约束的任何blit操作应用抖动。
3.3 EMBEDDED_BITMAP_TEXT_FLAG 绘制标记,可以在绘制文本时使用位图字体。
禁用此标志将阻止文本绘制操作在字体中使用嵌入式位图冲击,从而导致具有可缩放轮廓和位图冲突的字体仅绘制可缩放轮廓,并且仅使用位图冲击的字体无法绘制。
3.4 FAKE_BOLD_TEXT_FLAG 绘制标志,其对绘制文本应用合成加粗效果。
3.5 FILTER_BITMAP_FLAG 绘制标志,可在缩放位图上实现双线性采样。
3.6 HINTING_OFF 字体hinter选项禁用字体提示。
3.7 HINTING_ON 字体hinter选项启用字体提示。
3.8 LINEAR_TEXT_FLAG 绘制标志,使文本能够平滑线性缩放。
3.9 STRIKE_THRU_TEXT_FLAG绘制标志,将穿透装饰应用于绘制文本。
3.10
SUBPIXEL_TEXT_FLAG启用该标志会导致以子像素精度计算字形进步。
这可以与LINEAR_TEXT_FLAG一起使用,以防止文本在平滑缩放转换期间抖动。
3.11
UNDERLINE_TEXT_FLAG` 绘制标记,其将下划线装饰应用于绘制文本。

原创粉丝点击