您的位置:首页 > 其它

Shape与DrawableCompat

2016-05-02 22:10 232 查看

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的颜色。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: