我们都知道做项目的过程中可能都会遇到xx射鸡湿喜欢利用阴影来实现按钮的突出提升UI档次,而在开发中需要做阴影大家想第一种实现方式都是这玩意:
<shape android:shape="rectangle" >
<gradient
android:angle="180"
android:centerColor="#00FF0000"
android:centerX="0.9"
android:endColor="#99000000"
android:startColor="#00FF0000" />
</shape>
最无奈的是,这货局限性太高。
甚至有时候好不容易写完这货连阴影看起来都不像阴影,卧槽 卧槽 心中十万只草泥马经过~~~~~
撸主做的项目射鸡湿用特别多阴影,当撸主第一眼看到UI强烈产生想从家里带把菜刀砍死射鸡湿。
然而没砍人之前还得先把事情干啦,第二中种实现方法 "Shader"
既然有想法啦那就开干,写几行代码如下:
RadialGradient mRadialGradient = new RadialGradient(
getMeasuredWidth()/2,
getMeasuredHeight()/2,
getMeasuredWidth()/2,
new int[]{0xff5d5d5d,0xff5d5d5d,0x00ffffff},
new float[]{0.0f,0.7f,1.0f},Shader.TileMode.CLAMP);
LinearGradient mLinearGradient = new LinearGradient(
0,0,0,20,
new int[]{0xff5d5d5d,0xff5d5d5d,0xff5d5d5d },
new float[]{0.0f,0.5f,1.0f},Shader.TileMode.CLAMP);
SweepGradient mSweepGradient = new SweepGradient(
getMeasuredWidth()/2,
getMeasuredHeight()/2,
new int[]{0xff5d5d5d,0xff5d5d5d,0x00ffffff},
new float[]{0.0f,0.5f,1.0f});
.........................................几分钟过去...........................................
What?
Shader 只支持“圆形渐变” “线性渐变” “扫描渐变”
我擦!我擦!我擦!坑爹呢这是。
机智的我立马想到google,毕竟Baidu真搜不到东西,果然google不负重望找到
第三种实现方式:
万万没想 setShadowLayer 这函数这么屌能一次性搞定所有shadow,来!来!来!让小哥我试试先...
Paint paint1 = new Paint();
paint1.setTextSize(30);
// 设定颜色
paint1.setColor(0xFFFFFF00);
// 设定阴影(柔边, X 轴位移, Y 轴位移, 阴影颜色)
paint1.setShadowLayer(10, 3, 3, 0xFFFF00FF);
canvas.drawText("好无聊啊,好想被强奸啊", 20,40,paint1);
Paint paint2 = new Paint();
paint2.setColor(Color.GREEN);paint2.setTextSize(30);paint2.setShadowLayer(10, 5, 2, Color.YELLOW);
canvas.drawText("污污污污污污污污污污污", 20,150,paint2);
绘制几个字试试看效果如下:
zi.png
再看看矩形怎么样:
Paint paint3 = new Paint();
paint3.setColor(Color.BLACK);
paint3.setShadowLayer(15, 5, 2, 0xff5d5d5d);
canvas.drawRect(new Rect(200,200,250,250),paint3);
rect.png
嗯~ 不错 效果很nice 问题 解决啦....
但是期间遇到个问题,绘制矩形或圆之类的形状需要禁用硬件加速:
setLayerType( LAYER_TYPE_SOFTWARE , null);
不然阴影无效。
这个函数的问题可以参考这遍博客,写的很清楚:
http://blog.csdn.net/internetman/article/details/7098363
到这里就完啦~~~~
装完B就跑的感觉真好,哈哈哈哈哈哈哈!!!!
网友评论