在Android上使用图像精灵

10

我有一个(588x449)像素的图片精灵,包含不同的团队标志。在Android中,我有对应的ImageView显示它:

        <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"/>   

上述代码将在左上角正确显示我的图像的一部分。我的问题是我想能够移动所显示的图像位置,以便跳到精灵中的另一个区域。这在html/css中是相当常见的做法,但我没有在android xml中看到“position”类型属性。

1个回答

50

在Android中,你不能像在HTML中那样使用精灵(Sprites)。不过我能想到一种模拟精灵的方法:将精灵完全水平(或垂直)排列,然后使用ClipDrawable来将每个级别定义为精灵的一个新部分。然后根据需要定义每个View的级别。(如果精灵中的图像大小不都相同,你可能还需要使用InsetDrawable。)

但是,在Android中,我认为使用精灵是需要严肃重新考虑的。网页使用精灵的原因不是因为它们更容易使用,而是因为它可以加速网页加载,因为您不必进行多次HTTP请求。由于图像已经包含在发布APK中,因此使用精灵并没有任何帮助。

不仅如此,在Android上使用精灵可能会造成一些问题:

  1. 某些Android手机的内存限制比你预期的要低得多。如果你的所有图形都在内存中,这会降低你用于其他所有内容的内存。

  2. 一旦开始编写不同屏幕密度(ldpi,mdpi,hdpi)的应用程序,处理精灵将变得更加困难。


事实上,精灵所增加的内存使用往往被忽视了。要避免! - David Snabel-Caunt
那么,除了精灵之外,您建议使用什么?我知道OpenGL被建议用于动画,但如果我有一个非常简单的动画,比如一个棍子人走路,应该如何呈现,如果不是精灵表呢? - uesports135

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接