View:
1.有4个构造器
1).在view构造器中初始化数据
paint = new Paint();//初始化数据
paint.setColor(Color.DKGRAY);//设置画笔颜色
paint.setAntiAlias(true);//抗锯齿(描边)
//paint.setStyle(Paint.Style.FILL);//绘制样式(实心圆)
paint.setStyle(Paint.Style.STROKE);//绘制样式(空心圆)
paint.setStrokeWidth(10);//空心圆的边框粗度
2).在onDraw中进行绘制
canvas.drawCircle(circleX,circleY,50,paint);//画笔
参数:
<1>.绘图距离X轴的距离(四象限)
<2>.绘图距离Y轴的距离(四象限)
<3>.绘图的半径
<4>.在构造器中初始化的画笔
3).事件响应
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){ //动作行为
case MotionEvent.ACTION_DOWN://按下
circleX = (int) event.getX(); //获取距离父控件的x轴坐标
// circleX = (int) event.getRawX(); //获取距离屏幕边缘的x轴坐标
circleY = (int) event.getY();//获取距离父控件的Y轴坐标
invalidate();//重绘
break;
case MotionEvent.ACTION_MOVE://移动
circleX = (int) event.getX();//获取距离父控件的x轴坐标
circleY = (int) event.getY();//获取距离父控件的Y轴坐标
invalidate();//重绘
break;
case MotionEvent.ACTION_UP://抬起
break;
}
return true;//返回true,证明消费了这个事件(三个时间都运行了,包括按下,滑动,抬起),false的化,只走down事件
}
4).view重要方法
invalidate() //重绘 直接触发onDraw()方法 (只能在主线程中通知重绘)
postInvalidate() //重绘 直接触发onDraw()方法 (可以在子线程中通知重绘)
requsetLayuot() //请求重新布局 出发onMeasure()和onLayout()
2.view和viewgroup关系
view 类时所有控件的基类(父类)
viewgroup是容器类控件(五大布局的父view)
view 是viewgroup的基类(父类)
view的父类的objct
3.三部曲
onMeasure()---测量
onLayout()---布局
onDraw()---绘制
4.在线程中进行绘制
控件.invalidate() //重绘 直接触发onDraw()方法 (只能在主线程中通知重绘)
控件.postInvalidate() //重绘 直接触发onDraw()方法 (可以在子线程中通知重绘)