Android Customize View Shadow

我们都知道做项目的过程中可能都会遇到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);

绘制几个字试试看效果如下:

《Android Customize View Shadow》 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);

《Android Customize View Shadow》 rect.png

嗯~ 不错 效果很nice 问题 解决啦….

但是期间遇到个问题,绘制矩形或圆之类的形状需要禁用硬件加速:

setLayerType( LAYER_TYPE_SOFTWARE , null);

不然阴影无效。

这个函数的问题可以参考这遍博客,写的很清楚:
http://blog.csdn.net/internetman/article/details/7098363

到这里就完啦~~~~

装完B就跑的感觉真好,哈哈哈哈哈哈哈!!!!

    原文作者:qingwenLi
    原文地址: https://www.jianshu.com/p/00316dc702aa
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞