android android-vectordrawable

android - ¿Puedo usar un vector dibujable de la misma manera que usé un parche 9?



android-vectordrawable (2)

Esto es un poco incómodo pero funciona.

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" > <item android:left="@dimen/speech_bubble_corners_plus_tail" android:right="@dimen/speech_bubble_corners" android:bottom="@dimen/speech_bubble_spacing" tools:width="50dp" tools:height="50dp"> <shape android:shape="rectangle"> <solid android:color="@color/speech_bubble_user"/> </shape> </item> <item android:top="@dimen/speech_bubble_corners" android:bottom="@dimen/speech_bubble_corners_plus_tail" android:left="@dimen/speech_bubble_spacing" android:gravity="left" android:width="@dimen/speech_bubble_corners"> <shape android:shape="rectangle"> <solid android:color="@color/speech_bubble_user"/> </shape> </item> <item android:top="@dimen/speech_bubble_corners" android:bottom="@dimen/speech_bubble_corners_plus_tail" android:gravity="right" android:width="@dimen/speech_bubble_corners"> <shape android:shape="rectangle"> <solid android:color="@color/speech_bubble_user"/> </shape> </item> <item android:width="@dimen/speech_bubble_corners" android:height="@dimen/speech_bubble_corners" android:bottom="@dimen/speech_bubble_spacing" android:gravity="bottom|right"> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="@dimen/speech_bubble_corners" android:height="@dimen/speech_bubble_corners" android:viewportWidth="10.0" android:viewportHeight="10.0"> <path android:pathData="M0,10 A10,10 0 0,0 10,0 L0,0 Z" android:fillColor="@color/speech_bubble_user"/> </vector> </item> <item android:width="@dimen/speech_bubble_corners" android:height="@dimen/speech_bubble_corners" android:gravity="top|right"> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="@dimen/speech_bubble_corners" android:height="@dimen/speech_bubble_corners" android:viewportWidth="10.0" android:viewportHeight="10.0"> <path android:pathData="M10,10 A10,10 0 0,0 0,0 L0,10 Z" android:fillColor="@color/speech_bubble_user"/> </vector> </item> <item android:width="@dimen/speech_bubble_corners" android:height="@dimen/speech_bubble_corners" android:left="@dimen/speech_bubble_spacing" android:gravity="top|left"> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="@dimen/speech_bubble_corners" android:height="@dimen/speech_bubble_corners" android:viewportWidth="10.0" android:viewportHeight="10.0"> <path android:pathData="M10,0 A10,10 0 0,0 0,10 L10,10 Z" android:fillColor="@color/speech_bubble_user"/> </vector> </item> <item android:width="@dimen/speech_bubble_corners_plus_tail" android:height="@dimen/speech_bubble_corners_plus_tail" android:gravity="bottom|left"> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="@dimen/speech_bubble_corners_plus_tail" android:height="@dimen/speech_bubble_corners_plus_tail" android:viewportWidth="150.0" android:viewportHeight="150.0"> <path android:pathData="M150,100 L150,0 L50,0 C50,11.9054549 52.5180742,22.2130322 55.2200144,32.2289993 C59.25,47.1679688 65.7054859,60.8615415 68.15625,65.5820312 C55.2200144,107.207031 41.7460938,127.800781 0,151 C61.5311854,147.539062 101.691406,129.675781 124.615295,97.6602593 C132.823321,99.8389881 141.106342,100 150,100 Z" android:fillColor="@color/speech_bubble_user"/> </vector> </item> </layer-list>

Estaba usando lo siguiente en dimens.xml :

<dimen name="speech_bubble_corners">10dp</dimen> <dimen name="speech_bubble_corners_plus_tail">15dp</dimen> <dimen name="speech_bubble_spacing">5dp</dimen>

Aquí hay un ejemplo de cómo se ve:

Sería mejor si la ruta pudiera tomar secciones variables de nueve parches. Parece que no debería ser teóricamente difícil. Cada sección podría tener algo como a +x o +y como opciones para agregar al pathData. Supongo que podría ser posible calcular esto en código y crear programáticamente los vectores apropiados a medida que fueran necesarios.

He estado jugando mucho con el parche 9, son un gran alivio cuando se trata de hacer un buen fondo para un botón, un formulario, etc.

Como los dibujables vectoriales ahora están disponibles con la biblioteca de soporte para una gran variedad de versiones de Android, estoy deseando usar los dibujables vectoriales de la misma manera que usé imágenes de 9 parches. Lamentablemente, no encontré ninguna posibilidad de configurar el relleno de contenido y los parches ...

¿Alguien ha logrado alcanzar esta mezcla de 9 parches / svg?


No puede aplicar un comportamiento de 9 parches a un vector dibujable en una zona específica. Los 9 parches están diseñados para bitmap de bitmap y un mapa de bits es solo una cuadrícula de píxeles almacenados en un int [x][y] . Para un mapa de bits de tamaño variable, el comportamiento de 9patch dice "hey la columna 12 (uno de 9patched) se puede duplicar n veces en paralelo", entonces la imagen se estira y ya no es proporcional .

Mientras que un vector dibujable es solo una definición de trazado de dibujo estático. El resultado siempre será reescalado y proporcional a su ruta original porque la ruta no cambia dinámicamente.