shape 对应的java类的GradientDrawable,而不是ShapeDrawable
**ShapeDrawable
构造函数
ShapeDrawable()
ShapeDrawable(Shape a)
Shape派生类
RectShape() ArcShape() OvalShape() RoundShape() PathShape()
setBounds()函数所设置的矩形位置指在控件中的位置。
ShapeDrawable.getPaint()中如果改变了Paint的内容,它就立刻会在shapeDrawable中重画。此时ShapeDrawable中的样式已经改变了。
RoundRectShape
public RoundRectShape(float[] outerRadii,RectF inset,float[] innerRadii)
//outerRadii填充8个数字,每两个一组,分别对应坐上,右上,右下,左下,每组第一个数字代表椭圆的X轴半径,第二个数字代表椭圆的Y轴半径
insert表示内部矩形与外部矩形各边的边距
PathShape
public PathShape(Path path,float stdWidth,float stdHeight)
//path表示要画的路径
//stdWidth,stdHeight 标准宽度和标准高度,即将整个ShapeDrawable宽高分多少分(类似像素点的意思?)
//比如 View
Path path = new Path();
path.moveTo(0,0);
path.lineTo(100,0);
path.lineTo(100,100);
path.lineTo(0,100);
mShapeDrawable = new ShapeDrawable(new PathShape(path,100,200));
mShapeDrawable.setBounds(new Rect(0,0,250,150));
setBounds()设置的宽高撑满了整个view(宽250,高150)
path路径其实占了 PathShape高的一半,所以绘制结果的高度在view中也是一半
Bitmap与Drawable对比
| 对比项 | 显示清晰度 | 占用内存 | 支持缩放 | 支持色相 色差调整 | 支持旋转 | 支持透明色 | 绘制速度 | 支持像素操作 |
|---|---|---|---|---|---|---|---|---|
| Bitmap | 相同 | 大 | 是 | 是 | 是 | 是 | 慢 | 是 |
| Drawable | 相同 | 小 | 是 | 否 | 是 | 是 | 快 | 否 |
- Bitmap在占用内存和绘制速度上不如Drawable有优势。
- Bitmap绘图方便,Drawable调用paint方便,调用canvas不方便
- Drawable有一些子类,可以方便完成绘图功能。