ImageView大小仅在onGlobalLayout()中有效

时间:2014-09-09 14:19:50

标签: java android imageview size oncreate

我在使用我正在制作的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();


}

}

0 个答案:

没有答案