2011-01-25 23 views
7

Quindi ho bisogno di cambiare la dimensione di un'immagine a seconda dell'area dello schermo. L'immagine dovrà essere metà dell'altezza dello schermo, perché altrimenti si sovrappone al testo.Android Modifica delle dimensioni dell'immagine in base alle dimensioni dello schermo?

Quindi altezza = 1/2 altezza dello schermo. Width = altezza * Proporzioni (solo cercando di mantenere il rapporto di aspetto lo stesso)

ho trovato qualcosa che era:

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

Ma come vorrei cambiare altezza dell'immagine in java? o anche XML, se possibile? Non riesco a trovare una risposta funzionante.

risposta

17

È possibile eseguire questa operazione con LayoutParams nel codice. Sfortunatamente non c'è modo di specificare le percentuali tramite XML (non direttamente, si può scherzare con i pesi, ma non sempre sarà di aiuto, e non manterrà le proporzioni), ma questo dovrebbe funzionare per voi:

//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); 

Potrebbe essere complicato, forse c'è un modo più semplice? Questo è quello che proverei prima, però.

+0

Sembra che sto ottenendo una chiusura forzata se provo a eseguire questo. Se questo aiuta affatto, sotto LogCat, sto ricevendo "gestore Uncrew: thread principale che esce a causa di eccezione non rilevata". Non sono esattamente sicuro di cosa significhi questo. Ps.Sono ancora un po 'nuovo per Android – QQWW1

+1

Beh, questo è un tipo di esempio generalizzato, la tua situazione cambierà naturalmente (nomi di variabili, ID XML, ecc.). Sotto LogCat, dovrebbe avere una traccia di quale eccezione si è verificata e in quale riga del file. – kcoppock

+0

Ahhh ... Vedo cosa ho fatto di sbagliato, ho sostituito "R.id.rootlayout" per il mio ImageView, non il mio RelativeLayout .. Grazie !!!! – QQWW1

Problemi correlati