我正在创建一个新的ViewGroup
。新视图中会绘制一些圆圈。该视图应该有5个初始圆圈,所以我想将它们均匀地分布在视图的宽度上,并且还要跟踪它们(它们的中心位置(x,y))以便重绘它们当视图无效时。
这是我的onMeasure
:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int desiredWidth = getPaddingLeft() + getPaddingRight() + PREFERED_SIZE;
int desiredHeight = getPaddingTop() + getPaddingBottom() + PREFERED_SIZE;
actualWidth = resolveSizeAndState(desiredWidth,widthMeasureSpec,0);
actualHeight = resolveSizeAndState(desiredHeight,heightMeasureSpec,0);
setMeasuredDimension(actualWidth, actualHeight);
}
我不确定何时应添加这些圈子。可以多次调用onMeasure
并获得不同的宽度和高度值,因此我不确定何时应该计算初始圆的(x,y).. onMeasure
内?在onDraw
的开头?
答案 0 :(得分:0)
您可以使用View.OnLayoutChangeListener
跟踪布局更改:
public class CustomView extends View implements View.OnLayoutChangeListener {
private int height;
private int width;
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
// add the layout listener
addOnLayoutChangeListener(this);
}
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
height = getHeight();
width = getWidth();
}
}
答案 1 :(得分:0)
请查看文档。测量部分有3个回调,我想你可以在最后一个回复:https://developer.android.com/reference/android/view/View.html
onMeasure(int, int)
调用以确定此视图及其所有子视图的大小要求。onLayout(boolean, int, int, int, int)
当此视图应为其所有子项指定大小和位置时调用。onSizeChanged(int, int, int, int)
当此视图的大小发生变化时调用。所以我猜你的计算最好的是onSizeChanged
。