Android Customize View Shadow

作者: qingwenLi | 来源:发表于2016-07-11 11:46 被阅读775次

    我们都知道做项目的过程中可能都会遇到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就跑的感觉真好,哈哈哈哈哈哈哈!!!!

    相关文章

      网友评论

        本文标题:Android Customize View Shadow

        本文链接:https://www.haomeiwen.com/subject/fgxjjttx.html