奇怪,有什么要重写这个方法呢?
1 为什么要调用setMeasuredDimension()
2 即使没重写onmeasure,在ondraw中照样可以得到尺寸,也可以在任意位置画,那么onmesure的意义何在呢?
从ui绘制逻辑来说,ui界面或者一个active始终是从根节点开始的,测量的最后一步就是调用了onmeasure。也就是说我们重写的onmeasure最终会被父view调用,我们重写onmeasure其实是为了确定已经了有意义的两个参数。所以setMeasuredDimension就是为了将两个参数确定,要不然这两个参数就没法被父view引用。对于普通view来说,onmeasure确定了ondraw的基准大小,似乎onmesure是父view子,ondraw是子view。其实不是这样子。
@Override
protected void onMeasure(int widthM, int heightM)
{
// TODO: Implement this method
/*super.onMeasure(widthM, heightM);
width=MeasureSpec.getSize(widthM);
height=MeasureSpec.getSize(heightM);*/
heightM=MeasureSpec.makeMeasureSpec(1000,MeasureSpec.EXACTLY);
widthM=MeasureSpec.makeMeasureSpec(1000,MeasureSpec.EXACTLY);
height=MeasureSpec.getSize(heightM);
width=MeasureSpec.getSize(widthM);
setMeasuredDimension(widthM,heightM);
}
@Override
protected void onDraw(Canvas canvas)
{
// TODO: Implement this method
super.onDraw(canvas);
/*设置背景为白色*/
canvas.drawColor(Color.WHITE);
canvas.drawCircle((int)width/2,(int)height/2,(int)width/10,paint);
Toast.makeText(jj,String.valueOf(getMeasuredWidth()),Toast.LENGTH_LONG).show();
canvas.drawCircle(500,500,50,paint);
从设计模式角度来说,这是为了分工明确,实现单一职责的原则,增加高内聚低耦合的架构,复用容易,架构(逻辑)清晰。
仓促,请原谅