我是靠谱客的博主 儒雅耳机,这篇文章主要介绍Paint 使用,现在分享给大家,希望可以做个参考。

Paint 用法

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

1. 关于text的方法

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

复制代码
1
2
3
//根据当前的字体和文字大小返回上方(负)基线(上升)的距离。 float ascent()

1.2 descent

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

1.3 breakText

1.3.1

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

1.3.2

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

代码演示

复制代码
1
2
3
4
5
6
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

复制代码
1
2
3
//同上 int breakText(CharSequence text, int start, int end, boolean measureForwards, float maxWidth, float[] measuredWidth)

1.4 FontFeatureSettings

1.4.1 getFontFeatureSettings具体指参考

复制代码
1
2
3
//返回字体设置。 具体值参考 String getFontFeatureSettings()

1.4.2 setFontFeatureSettings

复制代码
1
2
void setFontFeatureSettings(String settings)

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

1.5.1 getFontMetrics

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

1.5.2 getFontMetrics

复制代码
1
2
3
//返回metrics对象 Paint.FontMetrics getFontMetrics()

1.5.3 getFontMetricsInt

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

1.6 getFontSpacing

复制代码
1
2
3
根据当前的字体和文字大小返回推荐行间距。 float getFontSpacing()

1.7 getFontVariationSettings(后续更新)

1.7.1

复制代码
1
2
3
//返回字体变体设置。 api26以上 (没试过) String getFontVariationSettings()

1.7.2

复制代码
1
2
3
//api26以上 不清楚有什么作用 boolean setFontVariationSettings(String fontVariationSettings)

1.8 LetterSpacing

1.8.1

复制代码
1
2
3
//返回文字间距。 float getLetterSpacing()

1.8.2

复制代码
1
2
3
//为文本设置paint的字母间距。 void setLetterSpacing(float letterSpacing)

1.9 OffsetForAdvance

1.9.1 getOffsetForAdvance

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

1.9.2 getOffsetForAdvance

复制代码
1
2
//同上 int getOffsetForAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, float advance)

1.10 RunAdvance

1.10.1

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

1.10.2

复制代码
1
2
3
//同上 float getRunAdvance(CharSequence text, int start, int end,int contextStart, int contextEnd, boolean isRtl, int offset)

1.11 TextAlign

1.11.1

复制代码
1
2
//返回字体对齐方式 Paint.Align get TextAlign()

1.11.2

复制代码
1
2
void setTextAlign(Paint.Align align)

1.12 TextBounds

1.12.1

复制代码
1
2
3
//获取文本的宽高,通过bounds的Rect拿到整型。 void getTextBounds(String text, int start, int end, Rect bounds)

1.12.2

复制代码
1
2
3
//同上 void getTextBounds(char[] text, int index, int count, Rect bounds)

1.13 TextLocale

1.13.1 getTextLocale

复制代码
1
2
3
//获取当前文本的区域 Locale getTextLocale()

1.13.2 setTextLocale

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

1.13.3

复制代码
1
2
3
//api 24以上 还未测试 LocaleList getTextLocales()

1.13.4

复制代码
1
2
3
//api 24以上 还未测试 void setTextLocales(LocaleList locales)

1.16 TextPath

1.16.1

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

1.16.2

复制代码
1
2
3
//同上 void getTextPath(String text, int start, int end, float x, float y, Path path)

代码解析

复制代码
1
2
3
4
5
6
//注意要电泳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

复制代码
1
2
3
//返回在水平方向的比例 默认是1 float getTextScaleX()

1.17.2

复制代码
1
2
void setTextScaleX(float scaleX)

1.18 TextSize

1.18.1

复制代码
1
2
3
//Text的字体大小 float getTextSize()

1.18.2

复制代码
1
2
void setTextSize(float textSize)

1.19 TextSkewX

1.19.1

复制代码
1
2
3
//获取水平偏移 float getTextSkewX()

1.19.2

复制代码
1
2
void setTextSkewX(float skewX)

1.20 TextWidths

1.20.1

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

1.20.2

复制代码
1
2
//同上 int getTextWidths(String text, float[] widths)

1.20.3

复制代码
1
2
//同上 int getTextWidths(String text, int start, int end, float[] widths)

1.20.4

复制代码
1
2
//同上 int getTextWidths(CharSequence text, int start, int end, float[] widths)

代码解析

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

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

1.21.2

复制代码
1
2
Typeface setTypeface(Typeface typeface)

1.22 hasGlyph

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

1.23 measureText

1.23.1

复制代码
1
2
3
//获取文字的宽度 float measureText(char[] text, int index, int count)

1.23.2

复制代码
1
2
3
//同上 float measureText(CharSequence text, int start, int end)

1.23.3

复制代码
1
2
3
//同上 float measureText(String text, int start, int end)

1.23.4

复制代码
1
2
3
//同上 float measureText(String text)

1.24 FakeBoldText

1.24.1

复制代码
1
2
3
//获取与设置文本是否仿粗体 final boolean isFakeBoldText()

1.24.2

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

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

1.25.1

复制代码
1
2
boolean isElegantTextHeight()

1.25.2

复制代码
1
2
void setElegantTextHeight(boolean elegant)

1.26 LinearText

1.26.1

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

1.26.2

复制代码
1
2
3
//帮助setFlags(),设置或清除LINEAR_TEXT_FLAG位 void setLinearText(boolean linearText)

1.27 trikeThruText

1.27.1

复制代码
1
2
3
//删除线 final boolean isStrikeThruText()

1.27.2

复制代码
1
2
3
//设置是否有删除线 void setStrikeThruText(boolean strikeThruText)

1.28 SubpixelText

1.28.1

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

1.28.2

复制代码
1
2
void setSubpixelText(boolean subpixelText)

1.29 UnderlineText

1.29.1

复制代码
1
2
3
//下划线 final boolean isUnderlineText()

1.29.2

复制代码
1
2
void setUnderlineText(boolean underlineText)

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

2.1 Alpha

2.1.1

复制代码
1
int getAlpha()

2.1.2

复制代码
1
2
void setAlpha(int a)

2.2 Color

2.2.1

复制代码
1
int getColor()

2.2.2

复制代码
1
2
void setColor(int color)

2.2.3

复制代码
1
2
void setARGB(int a, int r, int g, int b)

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

复制代码
1
2
//获取颜色过滤器(可能为null)。 ColorFilter getColorFilter()

2.2.5

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

2.3 Flags

2.3.1

复制代码
1
2
//Return the paint's flags. int getFlags()

2.3.2

复制代码
1
2
void setFlags(int flags)

2.4 Hinting

2.4.1

复制代码
1
2
3
//返回paint的模式。 返回HINTING_OFF或HINTING_ON。 //官方直译,不知道什么效果。。。。 int getHinting()

2.4.2

复制代码
1
2
void setHinting(int mode)

2.5 MaskFilter

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

复制代码
1
2
3
//获取paint的maskfilter对象。 MaskFilter getMaskFilter()

2.5.2

复制代码
1
2
3
//设置或清除maskfilter对象。 MaskFilter setMaskFilter(MaskFilter maskfilter)

2.6 StrokeWidth

2.6.1

复制代码
1
2
3
// 返回线的宽度 比如 画一个空心圆, 就是返回空心圆的线条宽度 float getStrokeWidth()

2.6.2

复制代码
1
2
void setStrokeWidth(float width)

2.7 Style

2.7.1

复制代码
1
2
//设置填充的模式 Paint.Style getStyle()

2.7.2

复制代码
1
2
void setStyle(Paint.Style style)

2.8 StrokeMiter(没搞明白)

2.8.1

复制代码
1
2
3
// 获取画笔的倾斜度??? float getStrokeMiter()

2.8.2

复制代码
1
2
3
// 设置画笔的倾斜度 void setStrokeMiter(float miter)

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

文档地址
2.9.1

复制代码
1
2
Xfermode getXfermode()

2.9.2

复制代码
1
2
Xfermode setXfermode(Xfermode xfermode)

2.10 AntiAlias

2.10.1

复制代码
1
2
3
//是否打开抗锯齿 默认是没打开,一般情况下需要打开 final boolean isAntiAlias()

2.10.2

复制代码
1
2
void setAntiAlias(boolean aa)

2.11 Dither

2.11.1

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

2.11.2

复制代码
1
2
void setDither(boolean dither)

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

2.12.1

复制代码
1
2
3
//位图过滤器是否被激活。 final boolean isFilterBitmap()

2.12.2

复制代码
1
2
void setFilterBitmap(boolean filter)

2.13 reset

复制代码
1
2
3
//重置 void reset()

2.14 set(Paint src)

复制代码
1
2
3
//利用另外一个paint来设置这个paint void set(Paint src)

2.15 Shader

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

复制代码
1
2
Shader getShader()

2.15.2

复制代码
1
2
Shader setShader(Shader shader)

2.16 ShaderLayer(设置阴影)

2.16.1

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

2.16.2

复制代码
1
2
void clearShadowLayer() // 清除阴影扩散效果

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

2.17.1

复制代码
1
2
Paint.Cap getStrokeCap()

2.17.2

复制代码
1
2
void setStrokeCap(Paint.Cap cap)

2.18 StrokeJoin

2.18.1

复制代码
1
2
3
4
5
//获取与设置画笔画线等连接处的轮廓样式 //三种样式 Join.MITER Join.ROUND, Join.BEVEL Paint.Join getStrokeJoin()

2.18.2

复制代码
1
2
void setStrokeJoin(Paint.Join join)

2.19 getFillPath

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

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

详解看这里
2.20.1

复制代码
1
2
3
//获取paint的patheffect对象。 PathEffect getPathEffect()

2.20.2

复制代码
1
2
3
//设置或清除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` 绘制标记,其将下划线装饰应用于绘制文本。

最后

以上就是儒雅耳机最近收集整理的关于Paint 使用的全部内容,更多相关Paint内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(94)

评论列表共有 0 条评论

立即
投稿
返回
顶部