45 votes

Positionnement d'une image à l'intérieur d'une ImageView avec gravité : haut

      
                     Linear Layout  (Center)                  
                 
           ImageView                        
                                          (Center)        
                         Actual image                     
                                                          
                          (Center)                        
                                                          
                                            
               
                                                              
      

Et je veux faire ça :

       
                     Linear Layout  (Center)                  
                 
           ImageView                                      
                                          (Center)        
                         Actual image                     
                                                          
                          (Top)                           
                                                          
                                            
               
                                                              
      

Notez que : imageview a un centre de gravité avec une disposition linéaire Je veux que l'image dans la vue d'image ait une gravité supérieure, j'essaie de définir la gravité:top, mais rien ne change. Aide-moi

Edit : c'est mon xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@color/all_white">
    <LinearLayout android:id="@+id/title_bar" style="@style/TitleBar">
        <TextView android:layout_width="wrap_content" 
            android:id="@+id/tv_printweb"
            android:singleLine="true" 
            android:ellipsize="end" 
            style="@style/ScreenTitleText" />
    </LinearLayout>
    <RelativeLayout android:orientation="vertical"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:layout_below="@+id/tv_web_filename" 
        android:layout_above="@+id/tv_web_page_num"
        android:layout_weight="1" 
        android:background="@color/background">
        <LinearLayout android:id="@+id/ln_web_pre"
            android:layout_width="30dp" 
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true" 
            android:gravity="center">
            <Button android:id="@+id/btn_web_pre" 
                android:layout_width="40dp"
                android:layout_height="120dp" 
                android:background="@drawable/bt_left"
                />
        </LinearLayout>
        <LinearLayout android:id="@+id/ln_web_zoomview"
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:background="@color/all_white" 
            android:orientation="vertical"
            android:gravity="center" 
            android:layout_centerInParent="true">
            <ImageView android:id="@+id/web_zoomview"
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content"
                android:background="@color/all_white" 
                android:layout_gravity="top"
                />

        </LinearLayout>
        <LinearLayout android:id="@+id/llCircle"
                android:layout_height="fill_parent" 
                android:layout_width="fill_parent"
                android:layout_marginRight="40dp" 
                android:layout_marginLeft="40dp" 
                android:layout_marginBottom="25dp" 
                android:layout_marginTop="25dp">
        </LinearLayout>
        <LinearLayout android:id="@+id/ln_web_next"
            android:layout_width="30dp" 
            android:layout_height="fill_parent"
            android:layout_alignParentRight="true" 
            android:gravity="center">
            <Button android:id="@+id/btn_web_next" 
                android:layout_width="40dp"
                android:layout_height="120dp" 
                android:background="@drawable/bt_right_1"
                />
        </LinearLayout>
        <RelativeLayout android:id="@+id/pagebar_web_top"
            android:layout_width="fill_parent" 
            android:layout_height="30dp"
            android:layout_alignParentTop="true" 
            android:gravity="center_vertical"
            android:paddingLeft="10dip" 
            android:paddingRight="10dip">
            <TextView android:id="@+id/tv_web_page_size"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true" 
                android:gravity="center"
                android:text="Paper Size" 
                android:textColor="@color/all_black"
                android:textStyle="bold" 
                android:background="@drawable/paper_border" />
        </RelativeLayout>

        <RelativeLayout android:id="@+id/web_pagebar"
            android:layout_width="fill_parent" 
            android:layout_height="50dp"
            android:layout_alignParentBottom="true" 
            android:gravity="left"
            android:paddingLeft="10dip" 
            android:paddingRight="10dip">
            <TextView android:id="@+id/tv_page_num"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerVertical="true" 
                android:gravity="center"
                android:text="1/1" 
                android:textColor="@color/all_black"
                android:textStyle="bold" 
                android:background="@drawable/paper_border" />
            <Button android:id="@+id/btn_web_orientation"
                android:layout_width="50dp" 
                android:layout_height="50dp"
                android:layout_alignParentRight="true" 
                android:background="@drawable/rotate_l" />
        </RelativeLayout>

    </RelativeLayout>
    <LinearLayout android:gravity="right|center_horizontal"
        android:id="@+id/toolbar" 
        style="@style/FunctionBar">
        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:id="@+id/btn_web_print"
            style="@style/FunctionButton" 
            android:text="@string/str_print" />
    </LinearLayout>
</LinearLayout>

112voto

Terel Points 695

Définissez le scaleType sur fitStart dans votre XML :

 <ImageView
    android:id="@+id/ivMap"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitStart" >
</ImageView>

6voto

Michael Points 16659

Vous pouvez utiliser ImageView.ScaleType.MATRIX et définir la matrice d'image à l'aide de ImageView.setImageMatrix() . Matrix peut être obtenu en utilisant la méthode Matrix.setRectToRect() .

6voto

bigstones Points 9636

Veuillez vérifier la réponse de Terel, qui serait la bonne réponse.

Selon ce qu'il y a d'autre dans la mise en page, une solution pourrait être d'utiliser une autre mise en page (c'est-à-dire un FrameLayout qui est plutôt léger) à la place du ImageView , et d'avoir le ImageView à la place de l'image réelle, avec son android:layout_gravity="top" .

3voto

Juan Points 736

Avez-vous essayé d'utiliser l'attribut android:gravity = "top" Je vois que pour votre ImageView, vous utilisez Android:layout_gravity, vous pourriez peut-être essayer d'utiliser l'autre. Pour autant que je sache, l' attribut " android:layout_gravity " est utilisé pour définir la gravité de l'élément dans son parent, tandis que l' attribut " android:gravity " sert à définir la gravité du contenu de l'élément. (Quelqu'un me corrige si je me trompe ! =P hehe !)

2voto

Mokus Points 1335

Ne serait-il pas plus simple d'utiliser un RelativeLayout ? Avec android:layout_alignParentTop="true" et android:layout_centerHorizontal="true" vous pouvez obtenir l'effet souhaité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X