L'équivalent de ImageView scaleType 'centerCrop' bitmap drawable gravité
J'ai créé une activité avec une image d'en-tête. Cette image d'en-tête est créée à l'origine de l'int de l'Activité mise en page xml à l'aide d'une ImageView où la scaleType est fixé à centerCrop. C'est ce que je veux, c'centres de l'image, en l'attachant à gauche et à droite en mode portrait, en montrant tous en mode paysage.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="30dp"
android:paddingBottom="6dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:background="#919EAC"
android:orientation="vertical" >
<ImageView
android:id="@+id/header_image"
android:layout_width="match_parent"
android:layout_height="120dp"
android:contentDescription="@string/header_description"
android:scaleType="centerCrop"
android:src="@drawable/header" />
.... <other views> ...
Je voudrais le remplacer par un fond dessiné afin que je puisse utiliser l'image d'en-tête de l'espace pour l'affichage des données, et ça m'évite de répéter la même disposition dans les différentes activités.
Pour cette raison, j'ai créé un drawable que je peux consulter à l'android:attribut background:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<solid android:color="#919EAC" />
</shape>
</item>
<item>
<bitmap
android:antialias="true"
android:gravity="top|center_horizontal"
android:src="@drawable/header" />
</item>
</layer-list>
Ce drawable définit la couleur d'arrière-plan qui, autrement, la mise en page serait à définir et il définit une image d'en-tête qui, autrement, pourraient être inclus dans la présentation comme une ImageView.
Cependant, maintenant, mon image est mise à l'échelle, alors que je voudrais qu'il soit recadrée.
Vérification de l'Android à la documentation, j'ai essayé d'autres modes de gravité tels que
android:gravity="top|clip_horizontal"
Mais il semble toujours à l'écran/échelle différemment que l'affichage de l'image.
Quelle serait la définition correcte de l'arrière-plan dessiné?
- Avez-vous été en mesure de trouver une solution à votre problème? Je suis aux prises avec la même chose.
- connexes stackoverflow.com/questions/5119366/...
- Comment à propos de "fill_vertical|clip_horizontal"
Vous devez vous connecter pour publier un commentaire.
J'ai résolu ce problème avec un décorateur qui maintient le ratio d'aspect de la sous-drawable: https://gist.github.com/rudchenkos/e33dc0d6669a61dde9d6548f6c3e0e7e
Malheureusement, il n'y a aucun moyen de l'appliquer à partir de XML alors je le fais au tout début de mon splash Activité:
C'est à peu près équivalente à la spécification de la drawable comme
android:windowBackground
dans l'Activité thèmeDe centre de recadrage d'une image bitmap dans le code ce faire:
Je ne connais pas d'autre façon de centerCrop un bitmap xml sage.
Espère que cela aide quelqu'un.
J'ai trouvé cette solution à partir de ce post:
Android Culture Centre de l'image Bitmap
Je ne sais pas comment le faire avec l'arrière-plan. Vous pouvez essayer d'autres solutions si:
1) la solution la plus Simple pour afficher quelque chose sur le haut de l'image est de les mettre à la fois dans certains de disposition, de sorte qu'ils se chevauchent. Par exemple, vous pouvez utiliser un RelativeLayout avec les dimensions de l'ImageView, l'ImageView est match_parent dans les deux dimensions et un TextView dans le centre.
2) Vous pouvez enregistrer le Imageview dans une mise en page différente, disons, header.xml et l'utiliser par inclure header.xml partout où vous en avez besoin.
3) Si la mise en page à afficher en haut de l'ImageView est la même partout, alors vous pouvez créer une mise en page personnalisée avec une ImageView et de dire, un TextView dans le centre, et l'utiliser à la disposition de partout. Vous pouvez définir le TextView chaîne sur cette mise en page personnalisée, puis. Vous pouvez en lire plus sur des mises en page personnalisées, elles sont faciles.
À l'aide de
scaleType = "centerCrop"
vous étiez obtenir un résultat qui vous souhaité, rognage des bords de l'image et de montrer la partie centrale selon ce qui convient à la taille de l'.Pour ImageView :
ImageView
ontscaleType
attribut qui ne fonctionne que pour l'Image qui est définie en tant que source à afficher. c'est à dire comme si c'étaitTextView
puisText
est-il de la source.Même, vous pourriez avoir remarqué que scaleType ne fonctionne pas pour l'image que de la définir comme fond qui ne fonctionne qu'avec des images qui ont fourni comme source soit dans le XML au moment de l'exécution.
Pour La Mise En
Layout
peut montrer les images de fond, mais il n'est pas un attribut donné pour la mise en page qui peut traiter les images d'arrière-plan et mettre à l'échelle par la valeur de l'attribut.De sorte que vous devriez cesser de demander l'installation de
ImageView
deLayout
, parce qu'Il ne l'a pas.2 différentes Solutions à Votre Problème
1) Conserver les Images d'arrière-plan de l'en-tête dans différentes drawable dossier et de l'utiliser, de cette façon, vous n'avez pas besoin de l'échelle d'exécution comme vous l'avez déjà développé l'image pour la taille différemment.
2) Vous avez juste besoin de refonte de votre XML, comme ci-dessous échantillon