java setpaintmode 用法_详解Paint的各种set方法

(1) 在application配置文件中关闭硬件加速:

android:allowBackup="true"android:hardwareAccelerated="false"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

……

(2)在自定义view中调用方法来关闭:

setLayerType(LAYER_TYPE_SOFTWARE, null);

注意: 因为在配置文件中关闭会让整个应用程序无法使用硬件加速的特性,所以强烈建议用第二种方式进行关闭。

二、详细解读各种set方法

set(Paint src)

顾名思义为当前画笔设置一个画笔,说白了就是把另一个画笔的属性设置Copy给我们的画笔,不累赘了

setAlpha(int a);

设置绘制图形的透明度,设置范围是[0..255]

setAntiAlias(boolean aa)

打开抗锯齿。抗锯齿是依赖于算法的,算法决定抗锯齿的效率,在我们绘制棱角分明的图像时,比如一个矩形、一张位图,我们不需要打开抗锯齿。

setARGB(int a, int r, int g, int b)

设置绘制的颜色,a代表透明度,r,g,b代表颜色值。

setColor(int color)

设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。

setColorFilter(ColorFilter filter)

设置颜色过滤,这个方法需要我们传入一个ColorFilter参数同样也会返回一个ColorFilter实例。 如需详细了解,请参考:

setDither(boolean dither)

5092692.html

5092692.html

setElegantTextHeight(boolean elegant)

具体效果未知,个人测试后出现了没有此方法的异常,百度无果。故,暂时不推荐使用。

setFakeBoldText (boolean fakeBoldText)

设置文本仿粗体。注意设置在小字体上效果会非常差。

setFilterBitmap(boolean filter)

如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示速度,本设置项依赖于dither和xfermode的设置。

setFlags (int flags)

设置标志,还是对paint进行样式的设置。比如:

// 实例化画笔并打开抗锯齿

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

setFontFeatureSettings(String settings)

setHinting(int mode)

setLetterSpacing(float letterSpacing)

设置行间距,默认是0.

setLinearText (boolean linearText)

设置是否打开线性文本标识,这玩意对大多数人来说都很奇怪不知道这玩意什么意思。想要明白这东西你要先知道文本在Android中是如何进行存储和计算的。在Android中文本的绘制需要使用一个bitmap作为单个字符的缓存,既然是缓存必定要使用一定的空间,我们可以通过setLinearText (true)告诉Android我们不需要这样的文本缓存。

setMaskFilter(MaskFilter maskfilter)

setMaskFilter(MaskFilter maskfilter)是paint中的方法,它可以用来对图像进行一定的处理。 如需详细了解,请参考:

setPathEffect(PathEffect effect)

设置绘制路径的效果,如点画线等 。 如需详细了解,请参考:

setRasterizer (Rasterizer rasterizer)

设置光栅,光栅这东西涉及太多太多物理知识。该方法同样不支持HW在API 21中被遗弃了,所以不推荐使用。

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

radius表示阴影的扩散半径;dx和dy表示阴影平面上的偏移值;shadowColor就不说了阴影颜色。

注意: 这个方法不支持硬件加速,所以我们要测试时必须先关闭硬件加速。

该方法为我们绘制的图形添加一个阴影层效果:

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

// 关闭单个view的硬件加速

setLayerType(LAYER_TYPE_SOFTWARE, null);

// 先绘制位图

mPaint.setColor(Color.RED);

// 设置阴影效果

mPaint.setShadowLayer(10, 3, 3, Color.DKGRAY);

// 画一个矩形

canvas.drawRect(200, 200, 600, 600, mPaint);

}

5092692.html

BlurMaskFilter可以模拟类似效果,跟BlurMaskFilter比起来setShadowLayer()方法是不是更简捷呢?但是BlurMaskFilter能做的setShadowLayer却不一定能做到哦!

setStrokeCap(Paint.Cap cap)

该方法用来设置我们画笔的 笔触风格 ,比如:ROUND,表示是圆角的笔触。那么什么叫笔触呢,其实很简单,就像我们现实世界中的笔,如果你用圆珠笔在纸上戳一点,那么这个点一定是个圆,即便很小,它代表了笔的笔触形状,如果我们把一支铅笔笔尖削成方形的,那么画出来的线条会是一条弯曲的“矩形”,这就是笔触的意思。除了ROUND,Paint.Cap还提供了另外两种类型:SQUARE和BUTT

setStrokeJoin(Paint.Join join)

这个方法用于设置接合处的形态,就像你用代码画了一条线,但是这条线其实是由无数条小线拼接成的,拼接处的形状就由该方法指定。可选参数是:BEVEL,MITER,ROUND。

mPaint.setStrokeJoin(Paint.Join.ROUND);

setStrokeWidth(float width);

当画笔样式(style)为STROKE或FILL_OR_STROKE时(空心样式时),设置笔刷的粗细度。

setStrokeMiter(float miter )

设置笔画的倾斜度,取值:>=0。如:小时候用的铅笔,削的时候斜与垂直削出来的笔尖效果是不一样的。主要是用来设置笔触的连接处的样式。可以和setStrokeJoin()来比较比较。

setStyle(Style style)

置画笔样式,如果不设置,默认是全部填充(FILL)。可选项为:FILL,FILL_OR_STROKE,或STROKE

画笔样式分三种:

1.Paint.Style.STROKE:描边

2.Paint.Style.FILL_AND_STROKE:描边并填充

3.Paint.Style.FILL:填充

setSubpixelText (boolean  subpixelText )

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

setXfermode(Xfermode xfermode)

设置图像的混合模式,详细使用方式请参考:

——————————————————————————————————————

注意:下方的方法仅仅是简要的介绍,如果想要详细了解,请移步:

setStrikeThruText (boolean strikeThruText)

设置文本删除线。

setTextAlign (Paint.Align align)

设置文本的对齐方式,可供选的方式有三种:CENTER,LEFT和RIGHT。

setTextLocale (Locale locale)

设置地理位置,这里如果你要使用,直接传入Locale.getDefault()即可。它用来设置文本的区域比如中文、日文等。

setTextScaleX (float scaleX)

将文本沿X轴水平缩放,默认值为1,当值大于1会沿X轴水平放大文本,当值小于1会沿X轴水平缩放文本

setTextSize (float textSize)

设置文字的大小,但是要注意该值必需大于零。

setTextSkewX(float skewX)

设置文本在水平方向上的倾斜。这个倾斜值没有具体的范围,但是官方推崇的值为-0.25可以得到比较好的倾斜文本效果,值为负右倾值为正左倾,默认值为0。

setTypeface (Typeface typeface)

设置文本字体样式。

setUnderlineText(boolean underlineText)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SPI 读取不同长度 寄存器_[读书笔记]《计算机科学速成课》—6 寄存器和内存

上节中介绍的ALU进行计算后得到的结果需要对其进行存储,可能还要进行多个连续操作,这就需要用到计算机内存了。计算机使用的是随机存取存储器(Random Access Memory, RAM),其只能在有电的情况下存储东西。另一种存储称…

one more step_KDA新歌《MORE》的一些冷知识:伊芙琳换回原声,摩托车是定制的

原标题:KDA新歌《MORE》的一些冷知识:伊芙琳换回原声,摩托车是定制的KDA女团在2020年宣布回归后就引发了很多的关注,回归后也是推出了首支单曲《THE BADDEST》,这首歌在之后也引发了不少网友的模仿以及翻唱&#xff0c…

java jdbc连接 代码块_java 中JDBC连接数据库代码和步骤详解及实例代码

•创建一个以JDBC连接数据库的程序,包含7个步骤:1、加载JDBC驱动程序:在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。 例…

Java不是true值不变_Java语言中String a=a;String b=a; 为什么 a==b 值为 true?

目前排名比较靠前的答案都回答得很浅显易懂了。我这里给你一个最可靠的理论依据(虽然比较晦涩)。Java语言规范(JavaSE 1.8版本)章节3.10.5中对此作了规范,因此所有的Java语言编译、运行时环境实现都必须依据此规范来实现。里面有这么一句话Moreover, a string liter…

计算H时M分S秒以后是_关于工程量计算-深圳工程量计算培训

一、梯形体积计算公式?第一种:梯形的体积(上底下底)高2总长度第二种:把四棱台延长成椎上截面面积为s,下截面r,台高为h,那么体积1/3(r-s)*h.若是正梯形物体则为V〔S1+S2+开根号(S1*S2…

java数据库edit_Java数据库连接——JDBC基础知识(操作数据库:增删改查)

一、JDBC简介JDBC是连接java应用程序和数据库之间的桥梁。什么是JDBC?Java语言访问数据库的一种规范,是一套API。JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类&#xff…

java ssm 系统的搭建_SSM框架下的javaweb学生管理系统--搭建系统结构

业务需求:一个登录页面,一个学生展示页面,添加、修改、删除三个功能目的是给大家了解一个初级系统的构造,不写那么复杂的需求了。从第一步开始:创建项目打开eclipse,点击右上角的File-->New-->Dynami…

opencv 高通滤波和低通滤波_滤波电路合集(低通滤波,CLCП滤波,DLC滤波,CRC П滤波)...

常见低通滤波电路L 一阶滤波C 一阶滤波CL 二阶滤波RC 二阶滤波LC 二阶滤波RCR T型三阶滤波LCL T型三阶滤波CRC π三阶滤波CLC π三阶滤波开关电源 单级低通滤波回路DLC 型二阶滤波器开关电源 双级串联式低通滤波回路CLC П型滤波器1、工作原理介绍a.输入正脉冲时,先给C1充电,充…

matlab语音信号处理实验_现代通信综合实验系统平台

现代通信综合实验系统平台近30年来,随着我国电信行业的迅猛发展,该行业的发展水平已成为衡量一个国家实力的一大关键因子。行业的发展同时,为当代相关专业大学生创造了极大的就业市场,市场对通信类人才有着极大的需求。培养一代全面型通信类人…

java 异常抛出空指针异常_java.lang.NullPointerException 抛出空指针异常

练习cookie做一个浏览商品记录显示,第一次会显示浏览过的商品,然后在浏览第二次就出现空指针异常2016-6-16 16:51:48 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet [CookieDemo2] in context with path [/…

iphone储存空间系统怎么清理_教你快速清理 iPhone 系统缓存垃圾,拒绝卡顿!

「 改变能改变的一切,接受不能改变的一切!」▼“iPhone存储空间”里的系统为何占用了几十G的甚至上百G的内存,如何清理?当我们使用 iPhone 一段时间之后,系统或应用中会出现一些多余的缓存数据,如果长时间不…

倒N字形排列java_Java排序8大算法实现

概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。当n较大,则应采用时间复…

cross_val_score 如何对孤立森林_【收藏】森林防火手抄报素材汇总!

森林防火手抄报模板参考【文字素材参考】01森林防火根据森林火灾燃烧中央地点,蔓延速度,受害部位和程度,大致可把森林火灾分为三大类:一.地表火 二.树冠火 三.地下火。以受害森林面积大小为标准,森林火灾分为以下四类:1.森林火警:…

java io 转换流_Java编程IO流中的转换流

对于IO流中的转换流,顾名思义,就是将字符流转换成字节流或者是将字节流转换成字符流的对象。那么有时候我们得到的是一个字符流,但是我们又需要进行一些计算之类的,或者我们得到的是一个字节流,但是我们又需要进行一些…

pb9 调用系统语音_成都电销系统一个月多少钱_选择灵狐传媒_收费透明

灵狐传媒表示:成都电销系统一个月多少钱_选择灵狐传媒_收费透明,在成都想要找一家专业的电销系统,今天小编带您看看该怎么选择吧,和研发实践,融合互联网、云计算及人工智能、通信、大数据等技术,研发推出了以人工智能为…

java thread 线程销毁_手把手带你了解Java线程的实现方式及生命周期原理

前言我们在工作中线程技术很多情况下都能用的到,而且我们在面试的时候,线程技术基本上也是必问的。今天我来从线程的实现方式以及线程的生命周期做一个全面的讲解与分析,帮助大家能更好的去了解线程技术。概念我们先来了解下线程和进程的概念…

python自动化_python自动化测试-Behave框架的用法介绍 - python测试学习

测码学院 Behave框架的用法介绍众所周知:行为驱动开发((behavior-drivendevelopment,BDD)是一种基于敏捷软件开发的方法。它可以鼓励开发人员,业务参与者和QA人员之间的协作。作为另一个Python自动化测试框架,“Behave”允许团队…

虚拟按键自己触发的java代码_在SystemUI添加虚拟按键

我们想要在volume、back、menu同一排添加一个虚拟按键,并且触发一个应用;1、首先我们要找到这些虚拟按键的位置:\frameworks\base\packages\SystemUI\res\layout-sw600dp\navigation_bar.xml2、横屏时,最左边的RelativeLayout 中添…

diskgeniusv4.4.0_入门TensorFlow2.0

今天老师带领我们入门TensorFlow2.0。至于tensorflow2.0是啥嘛,详细的可以度娘一下。我简述一下,就是一个end-to-end machine-Learning open source plantform(端对端的开源机器学习的平台)。学习tensorflow需要引入tensor这个概念,tensor的汉语意思就是…

java.close用法_void close()

void close()描述 (Description)java.io.FilterInputStream.close()方法关闭此输入流并释放与该流关联的所有系统资源。声明 (Declaration)以下是public void close()方法的声明 -public void close()参数 (Parameters)NA返回值 (Return Value)该方法不返回任何值。异常 (Excep…