0

1 つのビューで 1 つのアクティビティがあります。このビューの目的は、正方形のグリッドを表示することです。正方形の辺は、画面の幅を水平に存在する正方形の数で割った値に等しくなります。

@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() の後に呼び出されていると思いました。以前に電話した場合、問題は解決しますか? onMeasure() メソッドを呼び出すメソッド requestLayout() があることをドキュメントで読みましたが、それを実装する方法についての手がかりがありません。

御時間ありがとうございます。

4

3 に答える 3

2

onCreate() メソッドでこれを行うことをお勧めします。

Display display = getWindowManager().getDefaultDisplay();
int squareSide = (int) Math.floor(display.getWidth() / top);
于 2014-05-21T17:03:23.507 に答える