2011-01-25 21 views
7

Así que necesito cambiar el tamaño de una imagen dependiendo del área de la pantalla. La imagen tendrá que ser la mitad de la altura de la pantalla, porque de lo contrario se solapa con el texto.Android ¿Cambia el tamaño de la imagen según el tamaño de pantalla?

Tan Altura = 1/2 Altura de pantalla. = Ancho Altura * Relación de aspecto (tratando de mantener la relación de aspecto de la misma)

me encontré con algo que era:

Display myDisplay = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width =myDisplay.getWidth(); 
int height=myDisplay.getHeight(); 

Pero ¿cómo iba a cambiar la altura de la imagen en java? o incluso XML si es posible? Parece que no puedo encontrar una respuesta funcional.

Respuesta

17

Puede hacer esto con LayoutParams en el código. Desafortunadamente no hay forma de especificar porcentajes a través de XML (no directamente, puede perder peso, pero eso no siempre ayudará, y no mantendrá su relación de aspecto), pero esto debería funcionar para usted:

//assuming your layout is in a LinearLayout as its root 
LinearLayout layout = (LinearLayout)findViewById(R.id.rootlayout); 

ImageView image = new ImageView(this); 
image.setImageResource(R.drawable.image); 

int newHeight = getWindowManager().getDefaultDisplay().getHeight()/2; 
int orgWidth = image.getDrawable().getIntrinsicWidth(); 
int orgHeight = image.getDrawable().getIntrinsicHeight(); 

//double check my math, this should be right, though 
int newWidth = Math.floor((orgWidth * newHeight)/orgHeight); 

//Use RelativeLayout.LayoutParams if your parent is a RelativeLayout 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    newWidth, newHeight); 
image.setLayoutParams(params); 
image.setScaleType(ImageView.ScaleType.CENTER_CROP); 
layout.addView(image); 

Puede ser demasiado complicado, tal vez hay una manera más fácil? Esto es lo que primero probaría, sin embargo.

+0

Parece que estoy obteniendo un cierre forzado si intento ejecutar esto. Si esto ayuda en absoluto, en LogCat, obtengo el "Controlador no capturado: el hilo principal sale debido a una excepción no detectada". Aunque no estoy exactamente seguro de lo que significa esto. Ps.Soy un poco nuevo en Android todavía – QQWW1

+1

Bueno, esto es como un ejemplo generalizado, su situación va a variar por supuesto (nombres de variables, identificadores XML, etc.). En LogCat, debe tener un rastro de qué excepción se produjo y en qué línea del archivo. – kcoppock

+0

Ahhh ... Veo lo que hice mal, sustituí "R.id.rootlayout" para mi ImageView, no mi RelativeLayout .. ¡Gracias! – QQWW1

Cuestiones relacionadas