概述
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
//返回在水平方向的比例 默认是1
float
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来设置这个paint
void
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.BEVEL
Paint.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 S
TRIKE_THRU_TEXT_FLAG绘制标志,将穿透装饰应用于绘制文本。
SUBPIXEL_TEXT_FLAG
3.10启用该标志会导致以子像素精度计算字形进步。
UNDERLINE_TEXT_FLAG` 绘制标记,其将下划线装饰应用于绘制文本。
这可以与LINEAR_TEXT_FLAG一起使用,以防止文本在平滑缩放转换期间抖动。
3.11
最后
以上就是儒雅耳机为你收集整理的Paint 使用的全部内容,希望文章能够帮你解决Paint 使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复