view表示屏幕上的一块矩形区域
注:以下过程是按顺序执行的
1.创建过程
public View(Context context) { //java创建View调用 super(context); } public View(Context context ,AttributeSet attrs){ //xml中配置调用 super(context, attrs); }
2.布局过程
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); Log.e("asdf",widthMeasureSpec+""); Log.e("asdf",heightMeasureSpec+""); Log.e("asdf",getWidth()+""); Log.e("asdf",getHeight()+""); /** E/asdf: 1073742544 E/asdf: 1073743066 E/asdf: 0 E/asdf: 0 E/asdf: 1073742544 E/asdf: 1073743066 E/asdf: 720 E/asdf: 1242 */ @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); Log.e("as",w+""); Log.e("as",h+""); Log.e("as",oldh+""); Log.e("as",oldw+""); } /** E/as: 720 E/as: 1242 E/as: 0 E/as: 0 */ @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); Log.e("asd",changed+""); Log.e("asd",top+""); Log.e("asd",left+""); Log.e("asd",right+""); Log.e("asd",bottom+""); } /** E/asd: true E/asd: 0 E/asd: 0 E/as: 720 E/as: 1242 E/asd: false E/asd: 0 E/asd: 0 E/as: 720 E/as: 1242 */
3.绘制过程
onDraw方法(canvas画布类、paint画笔类)
//Paint画笔类 Paint paint = new Paint(); paint.setAntiAlias(true);//防抖动 paint.setDither(true);//抗锯齿 paint.setARGB(int,int,int,int);//设置带透明度的颜色 paint.setStrokeWidth(10);//设置笔的宽度 paint.setStyle(Paint.Style.STROKE);//空心,实心,实心带边框 paint.setShader(new LinearGradient());//设置线性渐变 //canvas可以绘制的内容: 1. 几何图形:矩形、圆、圆角矩形、线、弧线 canvas.drawLine(300, 300, 350, 350, paint);//两点确定一条直线 canvas.drawCircle(350, 450, 15, paint);//圆心、半径 canvas.drawRect(new RectF(300, 520, 500, 720), paint);//两点确定一个矩形 canvas.drawRoundRect(new RectF(240, 520, 270, 650), 20, 20, paint);//圆角矩形,两点、角度坐标 canvas.drawArc(new RectF(300, 400, 500, 600), 0, -180, true, paint);//画弧,三点钟方向为0°,ture表示是否显示半径 2. 文字 paint.setTextAlign(Paint.Align.CENTER);//文本位置居中 canvas.drawText("Hello World", int,int, paint);//文本内容,从哪一点开始写,默认往右偏 3. 路径(Path类) Path path = new Path(); path.moveTo(200,500);//起点坐标 path.lineTo(300,600);//终点坐标 path.quadTo(0,0,5,5);//从哪里到哪里画一条直线 path.close();//闭合路径,用于填充颜色 Path类包含一组添加矢量路径的方法add(); 4. 图片:Bitmap位图类
4.事件流程
onTouchEvent(MotionEvent)
//必须继承View类