[android] View's getWidth() and getHeight() returning 0


Answers

You are either accessing the ImageViews width and height before it has been measured, or after you set its visibility to GONE.

image2.setVisibility(View.GONE);

Then getWidth() or getHeight() will return 0.,

You can also have a look at onWindowFocusChanged(), onSizeChanged() and onMeasure():

 @Override
 public void onWindowFocusChanged(boolean focus) {
    super.onWindowFocusChanged(focus);
    // get the imageviews width and height here
 }
Question

I have looked at the similar questions and tried their solutions but it did not work for me. I try to take width of an imageView, but it returns 0. Here is the code:

public class MainActivity extends Activity {
private ImageView image1;   
float centerX,centerY;
private ImageView image2;
private boolean isFirstImage = true;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.rotate);
    image1 = (ImageView) findViewById(R.id.ImageView01);
    image2 = (ImageView) findViewById(R.id.ImageView02);
    image2.setVisibility(View.GONE);

    if (isFirstImage) {
        applyRotation(0, 90);
        isFirstImage = !isFirstImage;
    }   
}   

private void applyRotation(float start, float end) {


            centerX=image1.getWidth()/2.0f;
    centerY=image1.getHeight()/2.0f;
    final Flip3dAnimation rotation =

    new Flip3dAnimation(start, end,centerX , centerY);
    rotation.setDuration(500);
    rotation.setFillAfter(true);
    rotation.setInterpolator(new AccelerateInterpolator());
    rotation.setAnimationListener(new DisplayNextView(isFirstImage, image1,
            image2));

    if (isFirstImage)
    {
        image1.startAnimation(rotation);
    } else {
        image2.startAnimation(rotation);
    }
}
}

Can anyone help me with this? Thanks







Please using a Handler and get height and width on this with delay time >= 10

This may be useful for use:

@Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        getHeight();

    }

    private void getHeight() {
        // TODO Auto-generated method stub
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), "Height:" + mAnimationView.getMeasuredHeight(),
                        Toast.LENGTH_SHORT).show();
            }
        }, 10L);

    }



public class GETImageView extends ImageView {

public GETImageView (Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    Drawable d = getDrawable();

    if (d != null) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
    }
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}

The ImageView have not yet draw the image, so no width or height return. You may use a subclass to get the imageview width.

Here is some link provide you another easy methods:

How to get the width and height of an android.widget.ImageView?

How to get the width and height of an Image View in android?

Android ImageView return getWidth, getHeight zero

Hope this help you.






Related