我有一种活动,一种观点。此视图的目的是显示一个方形网格。正方形边将等于屏幕宽度除以水平存在的正方形数量。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getValues();
createLayout();
}
public static int top;
public static int side;
private void getValues() {
top = 5; //squares horizontally
side = 6; //squares vertically
}
private void createLayout() {
BoardView bv = new BoardView(this);
bv.setBackgroundColor(Color.BLUE);
setContentView(bv);
bv.createGuideLines();
}
我已经在努力创建具有自定义高度的视图,我这样做了:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
squareSide = MeasureSpec.getSize(widthMeasureSpec)/top;
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),squareSide*side);
}
public void createGuideLines() {
for(int c = 1; c<=side; ++c) {
path.moveTo(c*squareSide, 0);
path.lineTo(c*squareSide, squareSide*top);
}
for(int l = 1; l<=side; ++l) {
path.moveTo(0, l*squareSide);
path.lineTo(side*squareSide, l*squareSide);
}
invalidate();
}
问题是,当我调试时,squareSide 变量的值为 0。我认为 onMeasure() 可能在 createGuideLines() 之后被调用。如果我之前调用它,它会解决我的问题吗?我在文档上读到有一个方法 requestLayout() 调用 onMeasure() 方法,但我不知道如何实现它。
谢谢你的时间。