2011-04-30 34 views

Respuesta

55

Puede crear un recurso (capa estirable XML) para 'frontera' (en realidad de fondo) sus ImageView 's, y declarar en su theme que el ImageView El recurso de fondo es el xml dibujable.

Si necesita esta "frontera" que ser cambiado según el estado de la ImageView 's (focused, selected, etc.), entonces debería crear más dibujables capa, y ponerlos juntos en un xml selector (estado estirable) .
Luego en su tema debe configurar el fondo ImageView para que sea selector.xml.

actualización
A continuación se muestra un ejemplo de cómo especificar una frontera simple de sus imágenes, que se traducirá en

efteling with border

Tienes que

  1. crear una nueva capa archivo dibujable (image_border.xml),
  2. modificar/crear su styles.xml el archivo
  3. modificar/crear el archivo colors.xml
  4. modificar el archivo de diseño xml (o su código) para aplicar el estilo a la ImageView.

res/estirable/image_border.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <gradient android:angle="90" 
       android:startColor="@color/image_border_start" 
       android:centerColor="@color/image_border_center" 
       android:endColor="@color/image_border_end" /> 
     </shape> 
    </item> 
    <item android:top="2dp" android:left="2dp" 
     android:right="2dp" android:bottom="2dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/default_back_color" /> 
     </shape> 
    </item> 
</layer-list> 

res/valores/styles.xml
añadir las siguientes líneas:

<style name="myImageView"> 
    <!-- 3dp so the background border to be visible --> 
    <item name="android:padding">3dp</item> 
    <item name="android:background">@drawable/image_border</item> 
    <item name="android:scaleType">fitCenter</item> 
</style> 

res/valores/colors.xml
Añadir las siguientes líneas:

<color name="image_border_start">#40990000</color> 
<color name="image_border_end">#FF660000</color> 
<color name="image_border_center">#FFFF3333</color> 

Y finalmente especificar el estilo de su ImageView en su xml diseño:

<ImageView android:id="@+id/my_image" 
    android:layout_width="100dp" android:layout_height="100dp" 
    android:src="@drawable/efteling" 
    style="@style/myImageView" /> 
+0

Gracias amigos para obtener información. – Piyush

+1

No hay problema, espero que pueda comenzar con el ejemplo anterior. Si necesita más información, no dude en preguntar :) – rekaszeru

+0

Gracias de nuevo por el código ....... – Piyush

8

Usted puede utilizar este archivo XML como un estirable en lugar de varios archivos, pero este archivo se coloca en una carpeta dibujable. En ImageView use este archivo XML como un fondo dibujable , como: android:background="@drawable/following code file name".

Espero que esto sea útil para usted.

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#FFFFFF" /> 
    <stroke android:width="1dp" android:color="#000000" /> 
    <padding android:left="1dp" android:top="1dp" android:right="1dp" 
     android:bottom="1dp" /> 
</shape> 
1

¡Intenté todas las soluciones antedichas pero no funcionaron para mí! ¡Así que descubrí una solución simple para esto! :-)

Recuerdo que leí acerca de FrameLayout de Android en el siguiente article diciendo que nos ayuda a apilar nuestros elementos de interfaz de usuario uno encima del otro en el mismo orden en que los sumamos.

Solución:

<FrameLayout 
    android:layout_width="112dp" 
    android:layout_height="112dp" 
    android:layout_marginLeft="16dp" <!-- May vary according to your needs --> 
    android:layout_marginRight="16dp" <!-- May vary according to your needs --> 
    android:layout_centerVertical="true"> 
    <!-- following imageView acts as the boarder which sitting in the background of our main container ImageView --> 
    <ImageView 
     android:layout_width="112dp" 
     android:layout_height="112dp" 
     android:background="#000"/> 
    <!-- following imageView holds the image as the container to our image --> 
    <!-- layout_margin defines the width of our boarder, here it's 1dp --> 
    <ImageView 
     android:layout_width="110dp" 
     android:layout_height="110dp" 
     android:layout_margin="1dp" 
     android:id="@+id/itemImageThumbnailImgVw" 
     android:src="@drawable/banana" 
     android:background="#FFF"/> 
</FrameLayout> 

Vista previa:

Y eso es todo. Obtendrás lo siguiente como imageView!

preview of the ImageView with boarder

pros y contras:

creo que esto es bastante fácil solución para ser utilizado en cualquier otro lugar y que es todo lo que haces se asienta en un solo lugar tan fácil para modificarlo. Sin embargo, no me gusta tener que agregar dos ImageViews.

Cuestiones relacionadas