Shape与DrawableCompat

Shape基础

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


其中倒数第二个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);

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


DrawableCompat

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值