(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)

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);

}

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)

java setpaintmode 用法_详解Paint的各种set方法相关推荐

  1. js中every用法_详解JavaScript中的every()方法

    JavaScript 数组中的每个方法测试数组中的所有元素是否经过所提供的函数来实现测试. 语法 array.every(callback[, thisObject]); 下面是参数的详细信息: ca ...

  2. java time 周期性执行,详解ScheduledExecutorService的周期性执行方法

    详解 ScheduledExecutorService 的周期性执行方法 在最近的工作中,需要实现一个当一个任务执行完后,再等 100 毫秒然后再次执行的功能.当时最先反映到的就是 java 线程池的 ...

  3. 详解Paint的各种set方法

    一.前言 我们用set方法来设置画笔的样式,类似于我们挑选画笔画画的过程.由于上面有些方法不支持硬件加速,所以在高版本系统中可能会没有效果.因此,我们首先来看看官方废弃的方法. 当你要使用打叉的方法时 ...

  4. python java混合编程_详解java调用python的几种用法(看这篇就够了)

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  5. java内部格式_详解java内部类的访问格式和规则

    详解java内部类的访问格式和规则 1.内部类的定义 定义一个类来描述事物,但是这个事物其中可能还有事物,这时候在类中再定义类来描述. 2.内部类访问规则 ①内部类可以直接访问外部类中的成员,包括私有 ...

  6. idea看java版本设置_详解IntelliJ IDEA 中如何配置多个jdk版本即(1.7和1.8两个jdk都可用)...

    详解IntelliJ IDEA 中如何配置多个jdk版本即(1.7和1.8两个jdk都可用) 有时候需要看Java源码,但是 Java 1.7 和 Java 1.8的差别的关系,有时候你想查看不同jd ...

  7. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

  8. java comparator相等_详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...

  9. python中 的用法_详解python中@的用法

    python中@的用法 @是一个装饰器,针对函数,起调用传参的作用. 有修饰和被修饰的区别,@function作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是函数定义). 代码1 结 ...

最新文章

  1. NoSQL and Redis
  2. 开涛老师的博客汇总 -- Web MVC 开发学习
  3. UITabBarController 笔记(三) UITabBarController 配合 UINavigationController 的使用
  4. linux源码编译rpm,Linux的RPM和源码包(CentOS)
  5. 高级特性(1)-切片
  6. vue 3.0和2.0区别_一文看懂 Vue.js 3.0 的优化
  7. Python 官方推荐的一款打包工具
  8. mybatis注解动态sql_超全MyBatis动态SQL详解
  9. ASP.NET Core 3.0中使用动态控制器路由
  10. Android之用SingleTask和TaskAffinity解决手机截取的项目启动页面问题
  11. 企业实战_15_MySql主从复制到MyCat总结
  12. 17. Store newed objects in smart pointers in standalone statements
  13. 我的世界基岩版种子和java版种子_我的世界:当前基岩版最强村庄神种,村庄下面集合所有要素...
  14. 23数据错误循环冗余检查/无法读取源文件或磁盘 解决
  15. 阿里云mysql导出表_mysql导出数据库表
  16. 【docker】win10系统下docker容器安装及使用(二):docker通过commit及dockerfile进行创建
  17. 倒计时7天丨2022全球边缘计算大会深圳站参会指南来啦!
  18. 无线路由器无法在计算机上设置,无线路由器设置管理地址无法打开解决方法
  19. 万德L2接口是什么?
  20. 已定义了两个整数变量A和B,完成下列功能: (1)若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中(2)若两个数均为奇数,则将两数均加1后存入原变量(3)若两个数均为偶数,则两个变量均不改变。

热门文章

  1. 带你从零入门 Serverless | 一文详解 Serverless 架构模式
  2. 查询字段是date类型的数据
  3. 策略模式+工厂模式(反射)+枚举代替 大量 if..else if..
  4. vmware安装问题:Microsoft Runtime DLL安装程序未能完成安装
  5. html-文本框和单选框
  6. 初始化java工具失败,“初始化 Java 工具”期间发生了内部错误, java.lang.NullPointerException...
  7. php7.0康乐安装_Ubuntu安装php7.0环境
  8. oracle读取表空间物理文件中数据,shell脚本读取oracle数据库数据写入到文件中
  9. C语言 for 循环 - C语言零基础入门教程
  10. BugkuCTF-Crypto题杰斐逊