Shape与DrawableCompat

Shape基础

        在定义ShapeDrawable时,需要传入一个Shape对象。它代表着一个具体的形状。其类结构图如下:

Shape与DrawableCompat_第1张图片

其中倒数第二个OvalShadow是CircleImageView中的内部类,外部无法使用。

PathShape

        根据一个Path路径创建一个Shape。如下:

        Path path = new Path();//创建Path
        path.moveTo(10, 10);
        path.lineTo(70, 70);
        path.lineTo(30, 20);
        path.close();
        PathShape shape = new PathShape(path, 100, 100);//创建PathShape
        ShapeDrawable drawable = new ShapeDrawable(shape);//创建ShapeDrawable
        Drawable wrap = DrawableCompat.wrap(drawable.mutate());
        wrap.setBounds(0, 0, getWidth(), getHeight());//一定要设置bounds,否则不显示
        DrawableCompat.setTint(wrap,Color.GREEN);//设置该Drawable显示的颜色
        drawable.draw(canvas);

RectShape

        矩形。直接new一个对象传到ShapeDrawable中当参数即可。想控件显示样式,可通过Drawable#getPaint()获取Paint对象,而且设置即可。

OvalShape

        椭圆。其椭圆为由setBounds()指定的内接椭圆。

ArcShape

        椭圆的一部分。该椭圆是通过setBounds()定义的内接椭圆。

RoundRectShape

        圆角矩形。

        第一个参数为圆角的半径。注:该圆角为某个椭圆的一部分,而椭圆的长短半轴由第一个参数中相应的位置指定。

        第二个参数为内矩形与外矩形各边的距离。

        第三个参数为内矩形的圆角半径。与第一个参数一样。如下:

        RoundRectShape shape = new RoundRectShape(new float[]{10, 20, 30, 40, 10, 20, 30, 40}, new RectF(30,30,30,30), new float[]{ 30, 40, 10, 20, 30,10, 20, 40});
        ShapeDrawable drawable = new ShapeDrawable(shape);

效果图如下,其中中间的空白区域为内矩形,红色的厚度为第二个参数指定的。

Shape与DrawableCompat_第2张图片

DrawableCompat

        v4包中提供的一个Drawable的兼容类。主要方法有:

        wrap():代理一个drawable对象,后继的操作应该是该方法的返回值。示例如PathShape的例子。

        setTint():设置当前drawable的颜色。

你可能感兴趣的:(Shape与DrawableCompat)