绘图onDraw
绘图,简单来说就是利用onDraw方法绘制一些图案。而继续细分,则分为以下几个部分
1、画笔画布的作用
画笔:paint类,主要用于指定颜色,透明度,笔的粗细,填充样式。
画布:canvas类,在画布上绘制图案,可以改变画布的尺寸和颜色等等。
举例:绘制简单的矩形:
public class MyView extends View {
public MyView(Context context) {
super(context);
}
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint(); //创建一个画笔对象
paint.setColor(0xFFFF6600); //设置画笔的颜色
paint.setStyle(Paint.Style.FILL); //设置填充方案
canvas.drawRect(10,10, 280, 150, paint);
}
}
这里有一点值得注意:系统默认颜色是透明的,所以要在setColor里加FF,来使其不透明,否则看不到图案
在MainActivity中添加自定义View
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout flo = findViewById(R.id.frameLayout);
flo.addView(new MyView(this));
}
结果:
2、绘制几何图形
举例:实现Android机器人的绘制:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
/********绘制机器人************/
Paint paint = new Paint();
paint.setAntiAlias(true); //采用抗锯齿
paint.setColor(0xFFA4C739); //设置颜色为绿色、
//绘制头
RectF rectF = new RectF(10, 10, 100, 100); //定义外轮廓矩形
rectF.offset(90, 20);
canvas.drawArc(rectF, -10, -160, false, paint); //绘制弧
//绘制眼睛
paint.setColor(0xFFFFFFFF);
canvas.drawCircle(165, 53, 4, paint); //绘制圆
canvas.drawCircle(125, 53, 4, paint); //绘制圆
//绘制天线
paint.setColor(0xFFA4C739);
paint.setStrokeWidth(2); //设置笔触宽度
canvas.drawLine(110, 15, 125, 35, paint); //绘制线
canvas.drawLine(180, 15, 165, 35, paint); //绘制线
//绘制身体
canvas.drawRect(100, 75, 190, 150, paint); //绘制矩形
RectF rectF_body = new RectF(100, 140, 190, 160);
canvas.drawRoundRect(rectF_body, 10, 10, paint); //绘制圆角矩形
//绘制胳膊
RectF rectF_arm = new RectF(75,75,95,140);
canvas.drawRoundRect(rectF_arm, 10, 10, paint); //绘制圆角矩形
rectF_arm.offset(120, 0);
canvas.drawRoundRect(rectF_arm, 10, 10, paint);
//绘制腿
RectF rectF_leg = new RectF(115, 150, 135, 200);
canvas.drawRoundRect(rectF_leg, 10, 10, paint);
rectF_leg.offset(40, 0);
canvas.drawRoundRect(rectF_leg, 10, 10, paint);
}
里面包含了椭圆,圆,矩形,圆角矩形,线的绘制。
结果:
3、绘制文本
在布局中显示文本信息
结果:
4、绘制图片
5、绘制路径
结果:
还有另一种显示路径的方法,用文字环绕:
结果: