我在使用我正在制作的Android应用中获取ImageView的大小时遇到问题。我已经阅读了几个解决这个问题的方法,但似乎没有解决我的问题。我只想在应用程序开始时获取一次大小,比如onCreate(),然后将任何内容加载到ImageView(当它为空时。)并将其用于我的应用程序的其余部分。
几乎可行的解决方案是使用getViewTreeObserver()。addOnGlobalLayoutListener。 我做到了这一点,它给我正确的大小和一切,但只在onGlobalLayout()方法。我想要做的就是将这个大小保存在某个类全局变量中,但是onGlobalLayout()中发生的一切都会保留在那里。它对班上其他人没有任何影响。我无法用这种方法写出我的整个应用程序,这太荒谬了。为什么会发生这种情况?我该如何解决?
此外,我尝试了OnFocusChangeListener解决方案,只有当我尝试退出应用程序时才会给出尺寸。正如所料,焦点已经改变,但这不是我需要的。
以下是代码:
public class Fractaler extends Activity {
int finalWidth;
int finalHeight;
TextView txt;
ImageView fractal;
Fractal mandelbrot;
boolean viewIsMeasured = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initialize();
}
private void initialize() {
txt = (TextView) findViewById(R.id.txt);
fractal = (ImageView) findViewById(R.id.mainImage);
fractal.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (!viewIsMeasured) {
finalWidth=fractal.getWidth();
finalHeight=fractal.getHeight();
viewIsMeasured = true;
mandelbrot=new Fractal("Mandelbrot",finalWidth,finalHeight);
fractal.setImageBitmap(mandelbrot.create());
}
}
});
txt.setTextColor(Color.CYAN);
//txt.setText(String.valueOf(mandelbrot.getWidth())+" "+String.valueOf(mandelbrot.getHeight()));
}
@Override
protected void onStart() {
super.onStart();
}
}