2011-04-20 18 views
10

Tengo un sprite de imagen (588x449) con una colección de diferentes logos de equipo. En Android tengo el ImageView correspondiente mostrar esto:Uso de sprites de imagen en android

 <ImageView android:id="@+id/image_team_logo" 
      android:src="@drawable/teamheaderssprite" 
      android:layout_height="25dp" 
      android:layout_marginLeft="5dp" 
      android:layout_marginTop="10dp" 
      android:layout_width="296dp" android:scaleType="matrix"/> 

Lo anterior se mostrarán correctamente la pieza de mi imagen en la esquina superior izquierda. Mi problema es que quiero mover la posición en la imagen que se muestra para poder saltar a otra área en el sprite. Esta es una práctica bastante común en html/css, simplemente no veo una propiedad de tipo 'posición' en Android xml.

Respuesta

42

No se pueden usar sprites de la misma manera en Android que con HTML. Sin embargo, hay una forma en que puedo pensar para simular los sprites: extienda el sprite completamente horizontal (o verticalmente), luego use un ClipDrawable para definir cada nivel como una nueva parte del sprite. Luego defina el nivel de cada Vista según corresponda. (Si las imágenes en el sprite no son todas del mismo tamaño, es posible que necesite utilizar también InsetDrawable.)

Sin embargo, me replantearía seriamente el uso de sprites en Android. Hay motivos por los que las páginas web usan sprites, y no es porque sean más fáciles: it's because it speeds up webpages because you don't have to make multiple HTTP requests. Dado que las imágenes ya estarán en su APK de lanzamiento, no obtendrá nada administrándolas.

No sólo eso, sino que estás haciendo algún daño por spriting en Android:

  1. Las restricciones de memoria en algunos teléfonos Android son mucho más bajos de lo que cabría esperar. Si la totalidad de sus gráficos está en la memoria en un momento dado, eso reduce la cantidad de memoria que tiene para todo lo demás.

  2. Sprites será más difícil de manejar una vez que comience a escribir para diferentes densidades de pantalla (ldpi, mdpi, hdpi).

+4

gracias, simplemente no los usaré – mattyp

+0

De hecho, el uso de la memoria aumentada por los sprites a menudo se pasa por alto. ¡Evitar! –

+0

¿Qué sugieres usar en lugar de los sprites entonces? Sé que se sugiere OpenGL para la animación, pero ¿qué pasa si tengo una animación muy simple, como caminar con una figura de palo? ¿Cómo debería ilustrarse eso si no es una hoja de sprites? – uesports135