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
2Typeface 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
2Xfermode getXfermode()
2.9.2
1
2Xfermode 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
2Shader getShader()
2.15.2
1
2Shader 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
2Paint.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 S
TRIKE_THRU_TEXT_FLAG绘制标志,将穿透装饰应用于绘制文本。
SUBPIXEL_TEXT_FLAG
3.10启用该标志会导致以子像素精度计算字形进步。
UNDERLINE_TEXT_FLAG` 绘制标记,其将下划线装饰应用于绘制文本。
这可以与LINEAR_TEXT_FLAG一起使用,以防止文本在平滑缩放转换期间抖动。
3.11
最后
以上就是儒雅耳机最近收集整理的关于Paint 使用的全部内容,更多相关Paint内容请搜索靠谱客的其他文章。
发表评论 取消回复