1、View
postInvalidate() ; //force view to draw again.
2、Canvas 画布
Canvas 原点为 左上角;
Canvas可以绘制的对象有:弧线(arcs)、填充颜色(argb和color)、 Bitmap、圆(circle和oval)、点(point)、线(line)、矩形(Rect)、图片(Picture)、圆角矩形 (RoundRect)、文本(text)、顶点(Vertices)、路径(path);
Android还提供了一些对Canvas位置转换的方法:rorate、scale、translate、skew(扭曲)等,而且它允许你通过获得它的转换矩阵对象(getMatrix)方法;
1、canvas.translate(x,y):以偏移原点(x,y)的位置作为坐标原点;例如,原来坐标原点在(100,100),translate(1,1),新坐标原点为(101,101);
2、canvas.save() & restore()
save:用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作;
restore:用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响;
canva还可以制作很多自定义控件,比如google日历的monthview就是用canvas绘制出来的,github上有很多使用canva的项目,所有的图表库都是用canvas绘制的;
public class CustomView1 extends View {
Paint paint;
private ArrayList<PointF> points=new ArrayList<>();
public CustomView1(Context context){
super(context);
paint=new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.YELLOW);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(3);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
for(PointF point : points){
canvas.drawPoint(point.x,point.y,paint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
points.add(new PointF(event.getX(), event.getY()));
postInvalidate();
return true;
}
}
3、Paint 画笔,该类有我们所需要的方法来在canvas上画图
4、Path ,该类封装几何路径,可以由直线线段、二次曲线、三次曲线组成