Android 画布 笔记

16 阅读1分钟

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有一些子类,可以方便完成绘图功能。