2011-01-25 3 views
5

J'essaie d'implémenter un ImageView avec des images de paysage ou de portrait. Ces images doivent correspondre à la largeur de l'image (si paysage) ou de la hauteur (si portrait) mais dans tous les cas, elles doivent être alignées en haut de la vue sans marge ni marge. Ce que je voudrais réaliser est quelque chose comme android:scaleType="fitStart"centré dans le cas d'images de portrait ou alignés sur le dessus en cas d'images de paysage.Android ImageView ScaleType * FIT_TOP *

Ajouté:

Maintenant, je me sers comme un code laid, ce qui semble fonctionner, mais pas sûr qu'il est la meilleure solution:

<com.custom.layout.MyImageView 
     android:id="@+id/detail_view_image" 
     android:src="@drawable/logo" 
     android:background="#fff" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_centerHorizontal="true" 
     android:cropToPadding="false" 
     android:adjustViewBounds="false" 
/> 

puis dans ma classe, qui s'étend ImageView i faire:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int imgWidth = getDrawable().getIntrinsicWidth(); 
     int imgHeight = getDrawable().getIntrinsicHeight(); 

     if(imgWidth>imgHeight) 
      setScaleType(ScaleType.FIT_START); 
     else 
      setScaleType(ScaleType.FIT_CENTER); 

     int width = measureWidth(widthMeasureSpec); 
     int height = measureHeight(heightMeasureSpec);  

     setMeasuredDimension(width, height); 
    } 
+0

Je cherche à faire quelque chose de similaire, avez-vous déjà trouvé une solution pour cela? –

+0

pas de chance jusqu'à présent, j'ai fini par utiliser le code que j'ai posté ci-dessus ... – 0m4r

+1

ok, merci pour le code! –

Répondre

2

au lieu de vues indigènes prépondérants vous pouvez simplement placer un extrait dans la méthode onCreate() qui modifie la scaleType du ImageView selon l'orientation du téléphone .

Quelques exemples extrait (je ne suis pas sûr que cela fonctionne comme ça, mais pour obtenir l'idée), dans la méthode onCreate:

ImageView imgView = findViewById(R.id.myImage); 
//portrairt orientation 
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
    imgView.setScaleType(ScaleType.FIT_CENTER); 
} else { //landscape orientation 
    imgView.setScaleType(ScaleType.FIT_START); 
} 

donc quand un changement d'orientation qui se passe alors le onCreate sera appelé à nouveau et changez le type d'échelle de la vue et si vous surchargez onConfigurationChanged() alors vous devriez ajouter l'extrait ci-dessus où vous voulez. Essayez-le et laissez-moi savoir si cela a fonctionné

+0

Confirmation? discussion? – 10s

Questions connexes