Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LayoutParams haven';当要求其宽度和高度时,未应用_Java_Android - Fatal编程技术网

Java LayoutParams haven';当要求其宽度和高度时,未应用

Java LayoutParams haven';当要求其宽度和高度时,未应用,java,android,Java,Android,我们正在开发android应用程序,但遇到了一个问题。 我们使用矩形来计算(在本例中)点的点击框。但我们也希望根据屏幕大小设置这些点的大小。 因此,这可以在创建点时完成,但是,因为我们将点放置在以编程方式创建的(水平方向的)线性布局中,这些线性布局的大小在实际绘制之前无法获得。因此,我们在这里找到了解决方案,即在WindowFocusChanged上的覆盖方法中设置LayoutParams。这样就可以了,大小已经设置好了。但是,紧接着我们要计算矩形的大小,我们的点还没有画出来,所以矩形的大小是不

我们正在开发android应用程序,但遇到了一个问题。
我们使用矩形来计算(在本例中)点的点击框。但我们也希望根据屏幕大小设置这些点的大小。
因此,这可以在创建点时完成,但是,因为我们将点放置在以编程方式创建的(水平方向的)线性布局中,这些线性布局的大小在实际绘制之前无法获得。因此,我们在这里找到了解决方案,即在WindowFocusChanged上的覆盖方法中设置LayoutParams。这样就可以了,大小已经设置好了。但是,紧接着我们要计算矩形的大小,我们的点还没有画出来,所以矩形的大小是不正确的。有办法解决这个问题吗?
我们的onWindowFocusChanged()当前是:

@Override
public void onWindowFocusChanged (boolean hasFocus){
    super.onWindowFocusChanged(hasFocus);
    if(hasFocus){
        //setting scaled layout for dots and lines and boxes
        setParameters();

        //making hitbox rectangles for dots
        makeHitboxRectangles();
    }
}
我们的setParameters()方法:

private void setParameters () {
    LinearLayout ll = (LinearLayout) findViewById(R.id.linearLayout);
    double llWidth = (double) ll.getWidth();
    double margin = (0.03*llWidth);
    double widthRatio1 = llWidth - (2 * margin);
    double widthRatio2 = 3.*wp.getMatrix().getN()+1.;
    double widthRatio = widthRatio1 / widthRatio2;
    int dotSize = (int) widthRatio;
    int lineWidth = 2 * dotSize;
    int lineHeight = dotSize;

    Log.i(TAG, "llWidth =" + llWidth + ", margin =" + margin + ", Dotsize =" + dotSize + "/" + widthRatio + ", part1 =" + widthRatio1 + ", part2 =" + widthRatio2);

    LinearLayout.LayoutParams dotParams = new LinearLayout.LayoutParams(dotSize,dotSize);
    LinearLayout.LayoutParams hLineParams = new LinearLayout.LayoutParams(lineWidth, lineHeight);
    LinearLayout.LayoutParams vLineParams = new LinearLayout.LayoutParams(lineHeight, lineWidth);
    LinearLayout.LayoutParams blockParams = new LinearLayout.LayoutParams(lineWidth, lineWidth);

    for (int i=0; i<wp.getMatrix().getM()+1; i++) {
        for (int j=0; j<wp.getMatrix().getN()+1; j++) {
            dots[j][i].setLayoutParams(dotParams);
            dots[j][i].setSize(dotSize);
            dots[j][i].invalidate();
        }
    }

    for (int i=0; i<lines.length; i++) {
        if (lines[i].isHorizontal()) {
            lines[i].setLayoutParams(hLineParams);
            lines[i].invalidate();
            lines[i].setWidth(lineWidth);
            lines[i].setHeight(lineHeight);
        } else {
            lines[i].setLayoutParams(vLineParams);
            lines[i].setWidth(lineHeight);
            lines[i].setHeight(lineWidth);
        }
    }

    for (int i=0; i<blocks.length; i++) {
        blocks[i].setLayoutParams(blockParams);
        blocks[i].setSize(lineWidth);
        blocks[i].invalidate();
    }
}
private void makeHitboxRectangles() {
    for (int i=0; i<wp.getMatrix().getM()+1; i++) {
        for (int j=0; j<wp.getMatrix().getN()+1; j++) {
            int[] coords = new int[2];
            ((LinearLayout) dots[j][i].getParent()).getLocationOnScreen(coords);
            Log.i(TAG, "for dot id=" + dots[j][i].getID() + ", layout coords =" + coords[0] + ", " + coords[1]);
            rects[j][i] = new Rect(
                    dots[j][i].getLeft(),
                    dots[j][i].getTop() + coords[1],
                    dots[j][i].getRight(),
                    dots[j][i].getBottom() + coords[1]);
            Log.i(TAG, "rect for id=" + dots[j][i].getID() + " is (" +
                    dots[j][i].getLeft() + ", " +
                    ( dots[j][i].getTop() + coords[1] ) + ", " +
                    dots[j][i].getRight() + ", " +
                    ( dots[j][i].getBottom() + coords[1] ) + ")");
        }
    }
}
private void setParameters(){
LinearLayout ll=(LinearLayout)findViewById(R.id.LinearLayout);
double llWidth=(double)ll.getWidth();
双边距=(0.03*llWidth);
双宽度比1=llWidth-(2*边距);
双宽度比2=3。*wp.getMatrix().getN()+1。;
双宽度比=宽度比1/宽度比2;
int dotSize=(int)宽度比;
int lineWidth=2*dotSize;
int lineHeight=dotSize;
Log.i(标记,“llWidth=“+llWidth+”,margin=“+margin+”,Dotsize=“+Dotsize+”/“+widthRatio+”,part1=“+widthRatio1+”,part2=“+widthRatio2”);
LinearLayout.LayoutParams dotParams=新的LinearLayout.LayoutParams(dotSize,dotSize);
LinearLayout.LayoutParams hLineParams=新的LinearLayout.LayoutParams(线宽、线宽);
LinearLayout.LayoutParams vLineParams=新的LinearLayout.LayoutParams(线宽、线宽);
LinearLayout.LayoutParams blockParams=新的LinearLayout.LayoutParams(线宽、线宽);

对于(int i=0;iQuestion不清楚,您想知道显示宽度还是布局宽度?@Krish这不是一个真正的问题,更不是我们遇到的问题,当我们调用makeHitbox矩形()时,setParameters()的更改还没有应用日志打印是否正确?@Krish日志打印的第一条水平线是整个屏幕的大小,其他所有的都是0。你能发布日志吗?