从 addOnPreDrawListener() 获取值
Getting values from addOnPreDrawListener()
我不明白如何从下面的方法中 return 值,我尝试 return 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。
你得到零是因为在你设置文本之前没有触发内部方法。这些值设置为您上次初始化它们时的值。
设置回调中的文本。
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));
}
获取雷达图像宽度和高度时设置值:
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);
}
编辑:
创建 class 个字段,并在提供新值时将这些值传递到您需要的地方。
我不明白如何从下面的方法中 return 值,我尝试 return 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。
你得到零是因为在你设置文本之前没有触发内部方法。这些值设置为您上次初始化它们时的值。
设置回调中的文本。
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));
}
获取雷达图像宽度和高度时设置值:
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);
}
编辑: 创建 class 个字段,并在提供新值时将这些值传递到您需要的地方。