zoukankan      html  css  js  c++  java
  • 【Android 界面效果20】Android GradientDrawable类的详解,设置activity的背景颜色渐变效果

    看到这个例子的标题RoundRects,我的第一感觉是介绍RoundRectShape, 打开例子看了代码却是使用GradientDrawable来实现的。

    GradientDrawable 支持使用渐变色来绘制图形,通常可以用作Button或是背景图形。

    GradientDrawable允许指定绘制图形的种类:LINEOVALRECTANGLE或是RING ,颜色渐变支持LINEAR_GRADIENTRADIAL_GRADIENT 和 SWEEP_GRADIENT

    其中在使用RECTANGLE(矩形),还允许设置矩形四个角为圆角,每个圆角的半径可以分别设置:

    public void setCornerRadii(float[] radii)

    radii 数组分别指定四个圆角的半径,每个角可以指定[X_Radius,Y_Radius],四个圆角的顺序为左上,右上,右下,左下。如果X_Radius,Y_Radius为0表示还是直角。

    颜色渐变的方向由GradientDrawable.Orientation定义可以有如下八种:

    看一下GradientDrawable的构造函数:

    public GradientDrawable(GradientDrawable.Orientation orientation, int[] colors)

    orientation指定了渐变的方向(以上八种),渐变的颜色由colors数组指定,数组中的每个值为一个颜色。

    本例定义一个渐变方向从组左上到右下,渐变颜色为红,绿,蓝三色:

    1
    2
    3
    mDrawable = new GradientDrawable(GradientDrawable.Orientation.TL_BR,
     new int[] { 0xFFFF00000xFF00FF00,
     0xFF0000FF });

    分别使用Liner,Radial 和Sweep三种渐变模式,并配合指定矩形四个角圆角半径,显示GradientDrawable的不同用法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
    setCornerRadii(mDrawable, r, r, 00);
    mDrawable.draw(canvas);
    ...
    mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
    setCornerRadii(mDrawable, 00, r, r);
    mDrawable.draw(canvas);
    ...
    mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
    setCornerRadii(mDrawable, 0, r, r, 0);
    mDrawable.draw(canvas);
    ...
    mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
    setCornerRadii(mDrawable, r, 00, r);
    mDrawable.draw(canvas);
    ...
    mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
    setCornerRadii(mDrawable, r, 0, r, 0);
    mDrawable.draw(canvas);
    ...
    mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
    setCornerRadii(mDrawable, 0, r, 0, r);
    mDrawable.draw(canvas);
    ...
    static void setCornerRadii(GradientDrawable drawable,
     float r0, float r1, float r2, float r3) {
     drawable.setCornerRadii(new float[] { r0, r0, r1, r1,
     r2, r2, r3, r3 });
    }

    Le王冬冬 博客分享地址: http://www.cnblogs.com/dongdong230/ 每个人都应做一天攻城狮
  • 相关阅读:
    06 is和==的区别 encode()编码 decode()解码
    05 dic的增删改查 字典的嵌套 考试题dic.get()的相关使用
    03 编码 int ,bool,str的常用操作 主要讲str
    01 基本数据类型 变量 if语句
    04 列表的增删改查 常用方法 元祖 range
    02 while循环 格式化输出 运算符
    多校2 Harmonious Army hdu6598 网络流
    P3159 [CQOI2012]交换棋子 网络流
    P2172 [国家集训队]部落战争 最大流
    P2402 奶牛隐藏 网络流
  • 原文地址:https://www.cnblogs.com/dongdong230/p/4183078.html
Copyright © 2011-2022 走看看