2012-06-06 4 views
4

Lorsque j'utilise android: adjustViewBounds = "true" dans mon imageView xml, il ne fonctionne pas. Si je mets setAdjustViewBounds (true); dans les constructeurs de mon ImageView, ça marche bien. Quelle est la différence, ou est-ce un bug?android adjustViewBounds bug?

<ImageView 
       android:id="@+id/PageViewMainImage" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:scaleType="matrix"  
       android:adjustViewBounds="true"    
       android:visibility="invisible"/> 
+0

Voir ce SO enfilez peut vous aider à http://stackoverflow.com/ questions/7719617/imageview-adjustviewbounds-not-working –

Répondre

16

L'ordre des opérations dans le constructeur ImageView (see source here) parse sur et définit la propriété adjustViewBounds de XML avant qu'il analyse et définit l'attribut scaleType de XML. Une partie de la méthode setAdjustViewBounds() (appelée par le constructeur avec votre valeur d'attribut XML) consiste à définir ScaleType sur FIT_CENTER lorsque la valeur est true.

Ainsi, lorsque le XML que vous avez envoyé chargé, le ScaleType est d'abord mis à FIT_CENTER puis redéfinis sur MATRIX après, tout à l'intérieur du constructeur. Comparez cela avec votre exemple d'appel setAdjustViewBounds() en Java à la place, et maintenant la dernière ScaleType sera FIT_CENTER car votre appel Java se produira après l'analyse des attributs XML (ce qui signifie que votre attribut android:scaleType="matrix" est ignoré. entre "fonctionne" et "ne fonctionne pas"

Je ne sais pas si Google appellerait cela un bug, car ils ne font que définir le ScaleType à ce qu'ils pensent que vous voulez pour préserver l'aspect, Les limites de la vue elles-mêmes changeront quand même, comme le nom de la propriété l'indique, l'image peut simplement se cliper d'une manière inattendue. Les documents pourraient probablement être plus clair sur cette « fonctionnalité », donc vous pouvez déposer un rapport de bogue à http://b.android.com

HTH

+3

AdjustViewBounds ne dépasse pas la taille naturelle du bmp. Si votre bmp est de 50x50 c'est le maximum que vous pouvez en tirer, vous n'obtiendrez pas une image mise à l'échelle dans une fenêtre de 200x200. Pour résoudre ce problème, vous devez fournir un bmp plus grand que la fenêtre afin qu'il puisse être réduit. – thedsz