0

我不明白如何从下面的方法返回值,我试图返回int,但它向我显示了一个无法解决的奇怪错误。这是代码:

private void showTheEnemy() {

    ViewTreeObserver vto = radarImage.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        public boolean onPreDraw() {
            radarImage.getViewTreeObserver().removeOnPreDrawListener(this);
            yradar_height = radarImage.getMeasuredHeight();
            xradar_width = radarImage.getMeasuredWidth();
            return true;
        }
    });
    coordinateText.setText(yradar_height + " " + xradar_width);
}

我知道方法中没有更新值,因为当我使用setText()方法时,int值是 0。

4

2 回答 2

0

您会得到零,因为在设置文本之前未触发内部方法。这些值设置为您上次初始化它们时的任何值。

从回调中设置文本。

private TextView coordinateText;
private int xradar_width = 0;
private int yradar_height = 0;

private void showTheEnemy() {

    ViewTreeObserver vto = radarImage.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        public boolean onPreDraw() {

            yradar_height = radarImage.getMeasuredHeight();
            xradar_width = radarImage.getMeasuredWidth();

            coordinateText.setText(String.format("%d %d", 
                yradar_height,
                xradar_width 
            ));

            radarImage.getViewTreeObserver().removeOnPreDrawListener(this);
            return true;
        }
    });

    // Your values are still 0 here

}

或者传递给另一个方法。

private TextView coordinateText;

private void showTheEnemy() {

    ViewTreeObserver vto = radarImage.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        public boolean onPreDraw() {

         setCoordinate(coordinateText,  
                radarImage.getMeasuredHeight(),
                radarImage.getMeasuredWidth() ));
            radarImage.getViewTreeObserver().removeOnPreDrawListener(this);
            return true;
        }
    });

}

private static void setCoordinate(TextView tv, int xPos, int yPos) {
     tv.setText(String.format("%d %d", xPos, yPos));
}
于 2016-12-19T21:13:46.110 回答
0

获取radarImage宽度和高度时设置值:

private void showTheEnemy() {
    ViewTreeObserver vto = radarImage.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        public boolean onPreDraw() {
            radarImage.getViewTreeObserver().removeOnPreDrawListener(this);
            yradar_height = radarImage.getMeasuredHeight();
            xradar_width = radarImage.getMeasuredWidth();
            coordinateText.setText(yradar_height + " " + xradar_width);
            return true;
        }
    });
    coordinateText.setText(yradar_height + " " + xradar_width);
}

编辑:创建类字段,并在提供新值时将这些值传递到您需要的地方。

于 2016-12-19T21:17:27.877 回答