Link to home
Start Free TrialLog in
Avatar of jbajaj
jbajaj

asked on

How to get image height and width before rendering it onto screen.

Hello friends,
   
        I am working on a android project. In this I need to get image height and width before it display on screen.
So that if any one know how to get the image original height and width before displaying them, then please help me.
        Here I attach some code , in which the image height and width is not get initially why this is happen and also until I am not display the second child by view flipper there size also not get. So please tell me where I am wrong or which method will give me the image height and width at that moment.

Thank you.
//The java code 

package Volga.Myproject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ViewFlipper;

public class Myproject extends Activity {
	ViewFlipper viewFlipper;
	Button child0,child1;
	ImageView imgChild0,imgChild1;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        viewFlipper=(ViewFlipper)findViewById(R.id.MainViewFlipper);
        child0=(Button)findViewById(R.id.btnChild0);
        child1=(Button)findViewById(R.id.btnChild1);
        imgChild0=(ImageView)findViewById(R.id.imgChild0);
        imgChild1=(ImageView)findViewById(R.id.imgChild1);
        
        System.out.println("Child 0 image Height"+imgChild0.getHeight()+" Width"+imgChild0.getWidth());
        System.out.println("Child 1 image Height"+imgChild1.getHeight()+" Width"+imgChild1.getWidth());
        System.out.println("************At FIRST THE H:W IS ZERO**********************");
        
        child0.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				viewFlipper.setDisplayedChild(0);
				System.out.println("Child 0 image Height"+imgChild0.getHeight()+" Width"+imgChild0.getWidth());
				if(imgChild0.getHeight()==0)
					System.out.println("************At FIRST THE H:W IS ZERO**********************");
				else
					System.out.println("***********Image Is previously loaded at this movment so that not zero************");
			}
		});
        
		child1.setOnClickListener(new OnClickListener() {
					
					@Override
					public void onClick(View arg0) {
						viewFlipper.setDisplayedChild(1);
						System.out.println("Child 1 image Height"+imgChild1.getHeight()+" Width"+imgChild1.getWidth());
						if(imgChild1.getHeight()==0)
							System.out.println("************At FIRST THE H:W IS ZERO**********************");
						else
							System.out.println("***********Image Is previously loaded at this movment so that not zero************");
					}
				});
    }
}




//main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >  
			<Button  
			    android:layout_width="wrap_content" 
			    android:layout_height="wrap_content" 
			    android:text="Child0"
			    android:id="@+id/btnChild0"
			    />
			 <Button  
			    android:layout_width="wrap_content" 
			    android:layout_height="wrap_content" 
			    android:text="Child1"
			    android:id="@+id/btnChild1"
			    />  
    
  </LinearLayout>  
   <ViewFlipper
						  android:orientation="vertical"
						  android:layout_width="fill_parent"
						  android:layout_height="fill_parent"
						  android:id="@+id/MainViewFlipper"
						  >
  
							    <LinearLayout android:orientation="vertical"
							  				android:layout_width="fill_parent"
							  				android:layout_height="fill_parent"
							  				android:id="@+id/child1">
											<ImageView  
											    android:layout_width="wrap_content" 
											    android:layout_height="wrap_content" 
											    android:src="@drawable/android"
											    android:id="@+id/imgChild0"
											    />
								</LinearLayout>	 <!-- child 0 default child --> 
								
								<LinearLayout android:orientation="vertical"
							  				android:layout_width="fill_parent"
							  				android:layout_height="fill_parent"
							  				android:id="@+id/child2">
							  				<ImageView  
											    android:layout_width="wrap_content" 
											    android:layout_height="wrap_content" 
											     android:src="@drawable/android_p"
											    android:id="@+id/imgChild1"/>
								</LinearLayout> <!-- child 1 child --> 
	
				</ViewFlipper>	 
    
</LinearLayout>

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Dejan Pažin
Dejan Pažin
Flag of Austria image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of jbajaj
jbajaj

ASKER

Hi dejanpazin,

  Thank you for reply, and its work fine for me  your simply great man. Thanks ones again.

  I just want to ask one more question , that how to see the  memory allocation or heap memory of our application. Because In my application I display big size(4 to 5 Mb) image by decoding them. but when I change this image by 6 to 7 times  then out of memory problem is occur. So I just want check whether my previous allocation is release or not. so please tell me how to check memory allocation in android.
Or if any tool available to see this.
(In logcat there is some heap but dont know how to handle.)

Its a common problem with bitmaps, I had it too. I scaled the image down, thats how I avoided the problem. It is also what is suggested here:

http://stackoverflow.com/questions/2131947/android-memory-allocation

About memory allocation, here is a very detailed answer:

http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android

In one sentence: it is not easy to get the memory allocation.

You should also know that an application can not allocate as much memory as on desktop, limit is much lower:

http://stackoverflow.com/questions/3590443/what-is-the-maximum-memory-limits-per-application-for-android-2-2