最近一直在忙于公司的项目,因为要去现场测试正式使用,项目不大但是经手了三个人,到我这里只能去填坑了,不说这个了,说一下今天得主题,自定义控件之基本图形绘制。
我们平时画图需要两种工具:纸和笔。在Android中 Paint 就是画笔,而Canvas类就是纸,在这里叫做画布。
所以,凡是跟画笔有关的设置,比如画笔的大小、粗细、画笔颜色、透明度、字体样式等,都在Paint类里设置,同光;凡是要画出成品的东西,比如圆形、矩形、文字等,都要调用Canvas里的函数生成。
下面我们自定义一个控件来说明一下:
public class BasisView extends View {
public BasisView(Context context) {
super(context);
}
public BasisView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public BasisView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
/** 创建一个画笔 */
Paint paint= new Paint();
/** 设置画笔颜色 */
paint.setColor(Color.RED);
/** 设置填充样式 */
paint.setStyle(Paint.Style.STROKE);
/** 设置画笔宽度 */
paint.setStrokeWidth(50);
/** 画圆 */
canvas.drawCircle(190,200,150,paint);
}
}
代码很简单,首先写一个类派生自View 。 派生的View 表示当前是一个自定义控件,类似Button、TextView这些控件都是派生自View的。如果我们想像LinearLayout、RelativeLayout这样生成一个容器,则需要派生ViewGroup。这个我们以后再说。
其次,重写onDraw(Canvas canvas)函数。可以看到,在该函数中,入参是一个Canvas 对应,也就是当前控件的画布,所以我们只要调用Canvas ,的绘制函数,效果就可以直接显示在空间上了。
在onDraw (Canvas canvas) 函数中,我们设置了画笔的基本属性。
/** 创建一个画笔 */
Paint paint= new Paint();
/** 设置画笔颜色 */
paint.setColor(Color.RED);
/** 设置填充样式 */
paint.setStyle(Paint.Style.STROKE);
/** 设置画笔宽度 */
paint.setStrokeWidth(50);
然后我们通过 canvas.drawCircle绘制出圆形和它的位置
/** x= 180, y=200 半径=150 画笔=paint */
canvas.drawCircle(190,200,150,paint);
就这样一个基础的图形,圆就画出来了