Paint 常用方法记录 +
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 常用方法记录 +相关推荐
- 数组的一些常用方法记录
栗子: var arr = [ 1, 2, 3 ]; 1. concat(); var arr2= arr.concat("4", "5", "6&q ...
- String类常用方法记录
String类常用方法练习 package cn.zixi;import java.nio.charset.StandardCharsets; import java.util.Arrays; imp ...
- 『Numpy』常用方法记录
numpy教程 防止输出省略号 import numpy as np np.set_printoptions(threshold=np.inf) 广播机制 numpy计算函数返回默认是一维行向量: i ...
- YII CDbCriteria 的一些常用方法记录
$criteria = new CDbCriteria; $criteria->addCondition("id=1"); //查询条件,即where id = 1 $cri ...
- apache commons - lang 常用方法记录
为什么80%的码农都做不了架构师?>>> Lang 中工具类比较多,这里介绍几个主要的: ClassUtils: getShortClassName,这个函数应该在 java ...
- mvc html 辅助方法,MVC HTML辅助类常用方法记录
(1)@Html.DisplayNameFor(model => model.Title)是显示列名, (3)@Html.ActionLink("Create New", & ...
- Oracle Spatial常用方法记录
1. 查询数据库中的Oracle spatial几何字段,结果为gml格式 select SDO_UTIL.TO_GMLGEOMETRY(shape) as shape from t_tx_ ...
- apicloud 常用方法记录
最近在写apicloud的项目,最后生成一个app,现在就apicloud进行基础操作汇总: 1.index.html入口页面的处理 var user_info = $api.getStorage(' ...
- Java常用的知识点就20_JAVA中一些需要记录的知识点
原标题:JAVA中一些需要记录的知识点 的老师今天给大家讲java中一些重要的知识点. JDK与JRE的区别: JRE是所有JAVA程序运行所需要的环境,任何JAVA程序的运行都依赖于JRE,当前从J ...
最新文章
- too many open files(打开的文件过多)解决方法
- SAP IBASE hierarchy remove - step2 handling
- TCP传输过程中丢包问题
- Android之父深入解析Android
- 线程执行android的looper,handler消息小结
- iOS----创建静态库
- 打造kubernetes 高可用集群(nginx+keepalived)
- 深入web的请求过程
- android studio安卓订餐管理系统
- 【程序源代码】微信公众号开发框架
- 张宇考研数学:命题人8套卷使用方法指导,做之前先来看看~
- Centos7.4安装Nginx实战
- 大麦票夹:从工具到服务的技术演进之路
- SQLSERVER 数据库邮件发送以表格形式发送(存储过程内容发邮件)
- 网络营销策略的前瞻性和大局观念
- 印度邦政府计划采用区块链技术减轻政府欺诈行为
- 王者荣耀孙策520皮肤特效展示 孙策520皮肤值得买吗
- MATLAB加入螺旋相位板调制,螺旋相位板
- 网易数帆基于 Kubernetes 的 Redis 云原生实践综述
- 牛市跟熊市是什么意思股市熊市是什么意思
热门文章
- 第20节 核心交换机配置热备份详解及实验演示—基于Cisco Packet Tracer
- c语言循环卖n西瓜 几天卖完,C++循环结构23道题含答案.docx
- Android 自定义相机 身份证拍照 自定义身份证相机
- Spring框架学习路线
- 【深度首发】死磕“2D转3D”的聚力维度,能否成为影视人工智能行业的独角兽?丨Xtecher 封面
- 如何制作Webp文件
- java webp文件转png,jpg
- WindowsPhone8常见问题及使用技巧
- 浅谈Api框架神器Swagger2
- 书到用时方恨少? 整理了一份初中、高中数学教材pdf 百度云