Paint 方法记录 +

  • 文字设置
    • 字体风格(黑体、斜体、...)
    • 字体大小
    • 对齐方式
    • 设置粗体
    • LCD
    • X轴拉伸缩放比例
    • 斜体
    • 下划线
    • 删除线
    • 隐藏模式
    • 字符间距
    • 线性文本
    • 地理位置
    • 倾斜角度
    • 添加标识 FLAG 代替方法设置功能
  • 图像设置
    • 线条宽度
    • 线冒(线的起始和终止样式)
    • 图形结合处(线条拐点)
    • 画笔类型(填充、描边、...)
    • 颜色
    • 渲染/渐变效果 +
    • 透明度
    • 抗锯齿
    • 抖动
    • 双线性过滤
    • 滤镜
    • 颜色过滤器
    • 图像混合模式(过渡模式)
    • 轮廓线样式
    • 阴影
  • 获取
    • 测量文本长度
    • 获取行间距
  • 参考

Paint:该类保存了绘制几何图形、文本和位图的样式和颜色信息。也就是说我们可以使用Paint保存的样式和颜色,来绘制图形、文本和bitmap。

文字设置

字体风格(黑体、斜体、…)

转:https://blog.csdn.net/u012587005/article/details/51105126

Paint mp = new paint();
mp.setTypeface(Typeface.DEFAULT_BOLD)

常用的字体类型名称还有:

Typeface.DEFAULT //常规字体类型
Typeface.DEFAULT_BOLD //黑体字体类型
Typeface.MONOSPACE //等宽字体类型
Typeface.SANS_SERIF //sans serif字体类型
Typeface.SERIF //serif字体类型

除了字体类型设置之外,还可以为字体类型设置字体风格,如设置粗体:

Paint mp = new Paint();
Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
p.setTypeface( font );

常用的字体风格名称还有:

Typeface.BOLD //粗体
Typeface.BOLD_ITALIC //粗斜体
Typeface.ITALIC //斜体
Typeface.NORMAL //常规

字体大小

void setTextSize(float textSize)

单位是PX

对齐方式

void setTextAlign(Align align)

Paint.Align.LEFT 左对齐
Paint.Align.CENTER 中心对齐,绘制从
Paint.Align.RIGHT 右对齐

设置粗体

setFakeBoldText(boolean fakeBoldText);

模拟实现粗体文字,设置在小字体上效果会非常差

LCD

setSubpixelText(boolean subpixelText);

设置该项为true,将有助于文本在LCD屏幕上的显示效果

X轴拉伸缩放比例

setTextScaleX(float scaleX);

设置绘制文字x轴的拉伸缩放比例,可以实现文字的拉伸缩放的效果

斜体

setTextSkewX(float skewX);

设置斜体文字,skewX为倾斜弧度

下划线

setUnderlineText(boolean underlineText);

设置带有下划线的文字效果

删除线

setStrikeThruText(boolean strikeThruText);

设置带有删除线的效果

隐藏模式

setHinting(int mode)

设置画笔的隐藏模式

字符间距

setLetterSpacing(float letterSpacing)

设置字符间的间距

线性文本

setLinearText(boolean linearText)

设置是否打开线性文本标识;由于文本想要快速绘制出来,必然是需要提前缓存在显存中的,一般而言每个文字需要一个字节的大小来存储它(当然具体需要多少字节与编码方式有关),那如果是长篇文章,可见所需的大小可想而知。我们可以通过setLinearText (true)告诉Android我们不需要这样的文本缓存。但如果我们不用文本缓存,虽然能够省去一些内存空间,但这是以显示速度为代价的。

由于这个是API 1的函数,由于当时的android手机的内存大小还是很小的,所以尽量减少内存使用是每个应用的头等大事,在当时的的环境下这个函数还是很有用的。

转:https://www.jianshu.com/p/e93481f19738

地理位置

void setTextLocale(Locale locale)

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

倾斜角度

void setTextSkewX(float skewX)

设置文字倾斜

添加标识 FLAG 代替方法设置功能

paint.setFlags(Paint.ANTI_ALIAS_FLAG);

Paint.ANTI_ALIAS_FLAG :抗锯齿标志
Paint.FILTER_BITMAP_FLAG : 使位图过滤的位掩码标志
Paint.DITHER_FLAG : 使位图进行有利的抖动的位掩码标志
Paint.UNDERLINE_TEXT_FLAG : 下划线
Paint.STRIKE_THRU_TEXT_FLAG : 中划线
Paint.FAKE_BOLD_TEXT_FLAG : 加粗
Paint.LINEAR_TEXT_FLAG : 使文本平滑线性扩展的油漆标志
Paint.SUBPIXEL_TEXT_FLAG : 使文本的亚像素定位的绘图标志
Paint.EMBEDDED_BITMAP_TEXT_FLAG : 绘制文本时允许使用位图字体的绘图标志

转 https://blog.csdn.net/weixin_42803953/article/details/110383729

图像设置

线条宽度

 void setStrokeWidth(float width)

用途:当画笔样式为STROKE或FILL_OR_STROKE时生效 ,设置画笔的线条两侧粗细度

图1 setStyle(Paint.Style.FILL)
图2 setStyle(Paint.Style.STROKE)

线冒(线的起始和终止样式)

setStrokeCap(Paint.Cap cap);

设置画笔的线冒样式:

Paint.Cap.BUTT:无
Paint.Cap.SQUARE:方形
Paint.Cap.ROUND: 半圆形

图形结合处(线条拐点)

设置绘制时各图形的结合方式,如平滑效果等

Paint.Join.MITER: 直角的样式
Paint.Join.ROUND:圆弧
Paint.Join.BEVEL:在直角样式上切了一个小三角形

Paint的setStrokeCap、setStrokeJoin、setPathEffect:https://blog.csdn.net/lxk_1993/article/details/102936227

画笔类型(填充、描边、…)

void setStyle(Style style)

一共分为三种,填充 Paint.Style.FILL,描边 Paint.Style.STROKE,还有最后不常用的一种 Paint.Style.FILL_AND_STROKE

如图1中,效果就是填充;图2是描边,图3 是 FILL_AND_STROKE

图1 setStyle(Paint.Style.FILL)
图2 setStyle(Paint.Style.STROKE)
图3 setStyle(Paint.Style.FILL_AND_STROKE)

颜色

 void setColor

使用数字颜色表示时,需要设置透明度

        paintBg.setColor(0xC2A688);paintBg.setAlpha((int) (0.2 * 255));paintProgress.setColor(0xffC2A688);
setARGB(int a,int r,int g,int b);

paint.setARGB(100, 255, 0, 0);
设置绘制的颜色,a代表透明度,r,g,b代表颜色值。

渲染/渐变效果 +

    BitmapShader        图形渲染LinearGradient   线性渲染RadialGradient    环形渲染SweepGradient   梯度渲染(扫描渲染)ComposeShader   组合渲染paint.setShader(bitmapShader);

使用场景:绘制渐变

透明度

setAlpha(int a);
设置绘制图形的透明度

取值范围从0~255。值越小,约模糊

抗锯齿

paint.setAntiAlias(true);

设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢

设置抗锯齿,可以让绘制的图形更平滑,看不见像素的锯齿

使用场景:图片绘制时

抖动

setDither(boolean dither);

设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰

使用场景:图片绘制时

双线性过滤

setFilterBitmap(boolean filter)

设置是否使用双线性过滤来绘制 Bitmap 。

图像在放大绘制的时候,默认使用的是最近邻插值过滤,这种算法简单,但会出现马赛克现象;而如果开启了双线性过滤,就可以让结果图像显得更加平滑。

使用场景:图片放大绘制时

滤镜

setMaskFilter(MaskFilter maskfilter)

BlurMaskFilter和EmbossMaskFilter,前者为模糊遮罩滤镜而后者为浮雕遮罩滤镜

BlurMaskFilter 指定了一个模糊的样式和半径来处理Paint的边缘

EmbossMaskFilter 指定了光源的方向和环境光强度来添加浮雕效果

使用场景:BlurMaskFilter 用于阴影边缘绘制;EmbossMaskFilter 用于滤镜

颜色过滤器

setColorFilter(ColorFilter colorfilter);
设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果

ColorMatrixColorFilter 颜色矩阵过滤器 :主要用来修改颜色
LightingColorFilter 光照颜色过滤器:光可以简单的完成色彩过滤和色彩增强功能
PorterDuffColorFilter 混合模式过滤器:通过添加新图层颜色,和原图层进行拼装混排(18种混排模式)


图片转自
Android图像处理——Paint之ColorFilter:https://blog.csdn.net/allen315410/article/details/45059989

自定义控件三部曲之绘图篇(九)——Paint之setColorFilter:https://blog.csdn.net/harvic880925/article/details/51253944

记录以上两个链接备用

图像混合模式(过渡模式)

setXfermode(Xfermode xfermode);

设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果

方法跟我们上面讲到的setColorFilter蛮相似的。

AvoidXfermode
PixelXorXfermode
PorterDuffXfermode

太难了,不看了

https://www.cnblogs.com/tianzhijiexian/p/4297172.html

                Xfermode mPdXfermode = new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY);mBgPaint.setXfermode(mPdXfermode);

轮廓线样式

setPathEffect(PathEffect effect)

单一效果的 CornerPathEffect DiscretePathEffect DashPathEffect PathDashPathEffect ,和组合效果的 SumPathEffect ComposePathEffect

自定义View:setPathEffect(PathEffect effect):https://blog.csdn.net/weixin_47623364/article/details/121597433

图片转自
详解Paint的setPathEffect(PathEffect effect):https://www.cnblogs.com/tianzhijiexian/p/4297783.html

阴影

setShadowLayer(float radius, float dx, float dy, int shadowColor)

在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色

setMaskFilter 也可以绘制阴影,setShadowLayer的阴影主要是为Text绘制。

在硬件加速开启的情况下, setShadowLayer() 只支持文字的绘制,文字之外的绘制必须关闭硬件加速才能正常绘制阴影

自定义View:阴影与模糊:https://blog.csdn.net/weixin_47623364/article/details/121715107

获取

测量文本长度

void getTextBounds(String text, int start, int end, Rect bounds)

将TextView 的文本放入一个矩形中, 测量TextView的高度和宽度

第一个参数 char[] text

//参数:paintText = new Paint();paintText.setStrokeWidth(dp2px(getContext(), 2));paintText.setStyle(Paint.Style.FILL);paintText.setDither(true);paintText.setTextSize(dp2px(getContext(), 16));paintText.setTextAlign(Paint.Align.LEFT);paintText.setColor(getContext().getResources().getColor(R.color.colorPrimary));String textStr = "0123456789";
//使用:Rect mRect = new Rect();Paint.FontMetricsInt fontMetrics = paintText.getFontMetricsInt();paintText.getTextBounds(textStr, 0, textStr.length(), mRect);int w = mRect.width();int h = mRect.height();int left = mRect.left;int top = mRect.top;int right = mRect.right;int bottom = mRect.bottom;LogUtils.i(TAG, "输出Rect ====" + "\n" +"w ===" + w + "\n" +"h ===" + h + "\n" +"left ===" + left + "\n" +"top ===" + top + "\n" +"right ===" + right + "\n" +"bottom ===" + bottom + "\n");

输出:

2020-12-04 16:46:14.207 29011-29011/com.yoshin.tspsdk I/NeusoftTspSdk----->CanvasTestView: 输出Rect ====w ===265h ===36left ===2top ===-35right ===267bottom ===1

获取行间距

getFontSpacing()

得到行间距

参考

拓展:Android Paint: .measureText() vs .getTextBounds():https://cloud.tencent.com/developer/ask/28191

Android Paint的使用详解 https://blog.csdn.net/abcdef314159/article/details/51720686

Android图像处理之Paint特效处理(Paint重点API方法精炼详解):https://blog.csdn.net/weixin_41101173/article/details/81807915

Android绘图篇(四)——Paint详解:https://blog.csdn.net/huxin1875/article/details/88966172

Paint 常用方法记录 +相关推荐

  1. 数组的一些常用方法记录

    栗子: var arr = [ 1, 2, 3 ]; 1. concat(); var arr2= arr.concat("4", "5", "6&q ...

  2. String类常用方法记录

    String类常用方法练习 package cn.zixi;import java.nio.charset.StandardCharsets; import java.util.Arrays; imp ...

  3. 『Numpy』常用方法记录

    numpy教程 防止输出省略号 import numpy as np np.set_printoptions(threshold=np.inf) 广播机制 numpy计算函数返回默认是一维行向量: i ...

  4. YII CDbCriteria 的一些常用方法记录

    $criteria = new CDbCriteria; $criteria->addCondition("id=1"); //查询条件,即where id = 1 $cri ...

  5. apache commons - lang 常用方法记录

    为什么80%的码农都做不了架构师?>>>    Lang 中工具类比较多,这里介绍几个主要的: ClassUtils:  getShortClassName,这个函数应该在 java ...

  6. mvc html 辅助方法,MVC HTML辅助类常用方法记录

    (1)@Html.DisplayNameFor(model => model.Title)是显示列名, (3)@Html.ActionLink("Create New", & ...

  7. Oracle Spatial常用方法记录

    1. 查询数据库中的Oracle spatial几何字段,结果为gml格式 select  SDO_UTIL.TO_GMLGEOMETRY(shape)  as  shape  from  t_tx_ ...

  8. apicloud 常用方法记录

    最近在写apicloud的项目,最后生成一个app,现在就apicloud进行基础操作汇总: 1.index.html入口页面的处理 var user_info = $api.getStorage(' ...

  9. Java常用的知识点就20_JAVA中一些需要记录的知识点

    原标题:JAVA中一些需要记录的知识点 的老师今天给大家讲java中一些重要的知识点. JDK与JRE的区别: JRE是所有JAVA程序运行所需要的环境,任何JAVA程序的运行都依赖于JRE,当前从J ...

最新文章

  1. too many open files(打开的文件过多)解决方法
  2. SAP IBASE hierarchy remove - step2 handling
  3. TCP传输过程中丢包问题
  4. Android之父深入解析Android
  5. 线程执行android的looper,handler消息小结
  6. iOS----创建静态库
  7. 打造kubernetes 高可用集群(nginx+keepalived)
  8. 深入web的请求过程
  9. android studio安卓订餐管理系统
  10. 【程序源代码】微信公众号开发框架
  11. 张宇考研数学:命题人8套卷使用方法指导,做之前先来看看~
  12. Centos7.4安装Nginx实战
  13. 大麦票夹:从工具到服务的技术演进之路
  14. SQLSERVER 数据库邮件发送以表格形式发送(存储过程内容发邮件)
  15. 网络营销策略的前瞻性和大局观念
  16. 印度邦政府计划采用区块链技术减轻政府欺诈行为
  17. 王者荣耀孙策520皮肤特效展示 孙策520皮肤值得买吗
  18. MATLAB加入螺旋相位板调制,螺旋相位板
  19. 网易数帆基于 Kubernetes 的 Redis 云原生实践综述
  20. 牛市跟熊市是什么意思股市熊市是什么意思

热门文章

  1. 第20节 核心交换机配置热备份详解及实验演示—基于Cisco Packet Tracer
  2. c语言循环卖n西瓜 几天卖完,C++循环结构23道题含答案.docx
  3. Android 自定义相机 身份证拍照 自定义身份证相机
  4. Spring框架学习路线
  5. 【深度首发】死磕“2D转3D”的聚力维度,能否成为影视人工智能行业的独角兽?丨Xtecher 封面
  6. 如何制作Webp文件
  7. java webp文件转png,jpg
  8. WindowsPhone8常见问题及使用技巧
  9. 浅谈Api框架神器Swagger2
  10. 书到用时方恨少? 整理了一份初中、高中数学教材pdf 百度云