android EmbossMaskFilter 浮雕效果实现
网上貌似还没有EmbossMaskFilter的相关文章,所以我在这里对他进行研究。
Lee出品,转载请注明出处。
首先说明一点:在网上查到有人说MaskFilter不能使用,也就是有的效果不能显示,在此予以纠正:由于android 4.0以上系统会默认开启硬件加速(可以通过代码canvas.isHardwareAccelerated()来判断),由于硬件加速不够完善,导致部分效果不能正常显示,如何关闭硬件加速戳:点击打开链接
好了,回到正题,先来看看源码:
public class EmbossMaskFilter extends MaskFilter { /** * Create an emboss maskfilter * * @param direction array of 3 scalars [x, y, z] specifying the direction of the light source * @param ambient 0...1 amount of ambient light * @param specular coefficient for specular highlights (e.g. 8) * @param blurRadius amount to blur before applying lighting (e.g. 3) * @return the emboss maskfilter */ public EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius) { if (direction.length < 3) { throw new ArrayIndexOutOfBoundsException(); } native_instance = nativeConstructor(direction, ambient, specular, blurRadius); } private static native int nativeConstructor(float[] direction, float ambient, float specular, float blurRadius); }
源码其实也是很简单的,创建一个浮雕滤镜,也就是指定光源的方向和环境光强度来添加浮雕效果。
看看参数含义:
direction 是float数组,定义长度为3的数组标量[x,y,z],来指定光源的方向
ambient 取值在0到1之间,定义背景光 或者说是周围光
specular 定义镜面反射系数。
blurRadius 模糊半径。
如下代码设置的效果
float []direction = new float[]{10, 10, 10}; float ambient = 0.5f; float specular = 1; float blurRadius = 1; EmbossMaskFilter filter = new EmbossMaskFilter(direction, ambient, specular, blurRadius); paint.setMaskFilter(filter);效果:
修改几个参数的值:
float ambient = 0.1f; float specular = 5; float blurRadius = 5;
效果:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。