自定义View之Paint
来源:互联网 发布:移动硬盘数据同步软件 编辑:程序博客网 时间:2024/05/19 14:17
MaskFilter
MaskFilter用来实现滤镜的效果,如滤化,浮雕,立体等。
MaskFilter有两个子类:
- BlurMaskFilter:模糊效果
- EmbossMaskFilter:浮雕效果
在Paint中,通过setMaskFilter方法来设置MaskFilter。如果传入的为null,将表示不使用任何滤镜效果。
- setMaskFilter(MaskFilter maskfilter): 设置MaskFilter
BlurMaskFilter(模糊效果)
先来看,BlurMaskFilter的构造函数:
BlurMaskFilter(float radius, BlurMaskFilter.Blur style)
它有两个参数:
- radius:它是float类型,表示是Blur Radius,即阴影的模糊半径,其值越大表示图形绘制出来越模糊,其值越小图形越清晰。
- style:它是BlurMaskFilter.Blur类型,用来表示阴影的模糊效果。
所谓的阴影效果,可以分为内阴影和外阴影,内阴影指的是阴影从图形轮廓向内侧扩张,外阴影指的是阴影从图形轮廓向外侧扩张。从阴影角度说,图形的绘制最多由三部分组成: 外阴影 + 图形本身内容 + 内阴影。
在BlurMaskFilter.Blur中,定义了系列的阴影效果:
- NORMAL:会同时绘制图形本身内容+内阴影+外阴影,即正常阴影效果。
- INNER:绘制图形内容本身+内阴影,不绘制外阴影。
- OUTER:不绘制图形内容以及内阴影,只绘制外阴影,即图形轮廓以内完全不绘制,轮廓线以内完全是空白的。
- SOLID:只绘制外阴影和图形内容本身,不绘制内阴影。
需要注意的是:
- 不管是哪种类型的阴影,当阴影模糊路径为0时,相当于没有阴影。随着阴影模糊半径变大,图形更模糊看不清。、
- 当绘制BitMap时,如果选择了OUTER类型,图片会不显示。
- 在创建BlurMaskFilter实例时,如果radius为0f,则会报异常
EmbossMaskFilter
EmbossMaskFilter用于实现浮雕效果。所谓的浮雕效果其实就是模拟光照效果,靠近光的一面显得亮一点,远离光的一面显得暗一点,这样就通过颜色的亮暗营造出浮雕的3D立体效果。而EmbossMaskFilter正是用来指定光源的方向和环境强度来指定浮雕效果。
先看EmbossMaskFilter的构造函数:
- direction:是float数组,定义长度为3的数组标量[x,y,z],来指定光源的方向。这个数组表示光线的方向,分别是x分量,y分量,z分量,它们值得的大小并不重要,最后都会归一为长度为1单位向量。
- ambient:表示环境光因子,float类型,取值是0到1,值越接近于0,环境光越暗,值越接近于1,环境光越亮
- specular:表示镜面反射因子,float类型,取值也是0到1。镜面反射就是模拟像镜子一样的高光反射,值越接近于0,镜面反射越强,被光照照射到的地方更容易出现很白很亮的状态,即高光效果。
- blurRadius:表示模糊半径,是float类型,其值越大,模糊效果越明显。
关闭硬件加速
值得注意的是,当我们设置了MaskFilter并没有效果。那是因为当targetSdkVersion >= 14的时候,MaskFilter就不会起效果了,这是因为Android在API 14以上版本都是默认开启硬件加速的,这样充分利用GPU的特性,使得绘画更加平滑,但是会多消耗一些内存。既然这样,就需要我们手动地关闭硬件加速了。关闭硬件加速有以下几种方式:
Application:在配置文件的application节点添加:
android:hardwareAccelerated=”true”
Activity:在配置文件的activity节点添加
android:hardwareAccelerated=”false”
View:可以获得View对象后调用,或者直接在View的onDraw()方法里设置:
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
若想了解更多Paint相关的内容,请跳入: 自定义View系列文章目录
如果觉得我的文章对您有用,请随意点赞、评论。您的支持将鼓励我继续创作!
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 【Paint】Android 自定义View之Paint篇(更新中...)
- 自定义view(二):onDraw 之 Paint
- 自定义View (三) :onDraw 之 paint 画笔
- 自定义View(一)---Paint
- android 自定义View之 Paint类的介绍
- Android自定义View——Paint之Xfermode
- Android 自定义View之路——Paint
- UIAutomator2.0详解(UIDevice篇----触屏操作2)
- Linux中使用update-alternatives配置多个jdk
- Postman使用官方文档翻译--7设置介绍
- wmd的改进算法
- 【2017年cs231n学习笔记2】Lecture3 损失函数 最优化
- 自定义View之Paint
- Java实现同步的几种方式
- expected '=', ',', ';', 'asm' or '__attribute__' before xxx
- CCF认证201703-2--学生排队
- 记一次坑爹的爬虫经历
- SoapUI:mock(模拟) service的使用
- NFA(子集算法,DFA最小化)代码实现
- 【蓝桥杯】【放麦子】
- 团队天梯赛L1-015. 跟奥巴马一起画方块