2012-04-07 5 views
8

Tratar de utilizar LayerDrawable (definido en XML como capa-lista) a la capa varios dibujables forma una sobre otra; para ser utilizado como fondo para un diseño.Prevención de formas de escala en un LayeredList sin utilizar Bitmap

La guía de Android (for LayerList) dice:

Todos los elementos estirables se escalan para ajustarse al tamaño de la vista que contiene, por defecto. Por lo tanto, la colocación de sus imágenes en una lista de capas en diferentes posiciones podría aumentar el tamaño de la vista y algunas imágenes escalar a medida que apropiado. Para evitar escalar elementos de la lista, utilice un elemento <bitmap> dentro del elemento <item> para especificar el dibujable y definir la gravedad de algo que no se escala, tales como "centro".

no quiero que mis formas a escala, pero estoy seguro de cómo envolver en bitmap etiquetas correctamente: se produce un error si lo hago de la siguiente manera:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_one" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_two" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_three" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_four" 
      android:gravity="center" /> 
    </item> 
</layer-list> 

El quejarse:

línea de archivo XML binario # 25: <bitmap> requiere un atributo src válida

Un ejemplo de uno de los elementos arrastrables, p. res/estirable/layer_one.xml:

<?xml version="1.0" encoding="utf-8"?> 

<!-- res/drawable/layer_one.xml --> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <solid android:color="#FFFFFF"/> 
    <corners 
     android:bottomRightRadius="15dp" 
     android:bottomLeftRadius="15dp" 
     android:topLeftRadius="15dp" 
     android:topRightRadius="15dp" /> 
</shape> 

El ejemplo utilizado en el sitio Android utiliza las imágenes como dibujables, formas no-XML definido (por no decir que mi error es específico de estos, y que no tienen cometió un error tonto en alguna parte). Cualquier pista apreciada, gracias.


Using drawable resources
estados de respuesta de este interrogación que no se puede utilizar un dibujable XML como el src de un mapa de bits. He modificado el título de la pregunta, para ahora preguntar cómo se puede evitar que las formas se escalen (cambiando así el tamaño de la vista de contenedor) sin usar bitmap, ¿o me veo obligado a utilizar recursos de imágenes reales?


añadido una imagen del resultado deseado - la capacidad de tener un fondo con un rectángulo relleno de forma regular o lo que sea, y luego en capas en la parte superior de esta, más dibujables forma (en este caso hay 3 puntos suspensivos). A la izquierda es ideal, donde se permite a la parte superior y las compensaciones a la izquierda, ya la derecha está bien, donde todas formas sólo tiene que ir a una posición por defecto:

enter image description here

Respuesta

2

Sí, (como por mi anterior answer) no se puede usar xml drawable para mapas de bits. Está bien construir, pero cuando ejecutas la aplicación, falla.

En cuanto a la instrucción use a <bitmap> element inside the <item> element, significa que puede definir más formas en su lista de capas y para eso sirve. Aunque también se puede definir mapas de bits, pero luego los mapas de bits deben tener un src valor referido a la imagen sólida (no xml).

Lo que puedes hacer es insertar el layer_one, layer_two y el xml de otra capa en tu layer_list xml. Por ejemplo:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item> 
     <shape 
      android:shape="rectangle" > 
      <solid android:color="#FFFFFF" /> 

      <corners 
       android:bottomLeftRadius="15dp" 
       android:bottomRightRadius="15dp" 
       android:topLeftRadius="15dp" 
       android:topRightRadius="15dp" /> 
     </shape> 
    </item> 

    <!-- and so on with your other shapes --> 

</layer-list> 

espero que debería funcionar :)

+0

Lo sentimos Waqas, olvidó los acentos abiertos al citar desde el sitio dev Android, debe decir "utilizar un elemento en el elemento ", fijado ahora. El método que describes es con el que empecé, pero la escala de formas para llenar la vista principal, que es lo que trato de evitar :( – ataulm

+0

sí, esa declaración todavía es válida para usar mapas de bits con un atributo src válido (no hace referencia a xml dibujable) como dibujable en la lista de capas. Incluso en el sitio del desarrollador de Android, están usando imágenes sólidas como ejemplo. ¿Qué estás tratando de producir? ¿Puedes publicarlo como una imagen? Tal vez te sugiera otras soluciones – waqaslam

+2

la afirmación es no es válido al establecer la gravedad (del mapa de bits) en "centro", lo que evitará que se escale. Esperaba definir una serie de elipses rellenas superpuestas unas sobre otras (en tamaño decreciente) como fondo. (Experimento, no final diseño: P) Publicaré una imagen dentro de los 10min. – ataulm

Cuestiones relacionadas