2011-04-20 72 views
10

我有一个图像(588x449)精灵与不同团队标志的集合。在Android中,我有相应的ImageView显示:在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"/> 

以上将正确显示我的图像在左上角的一块。我的问题是我想能够移动正在显示的图像中的位置,以便我可以跳到精灵中的另一个区域。这在html/css中很常见,我只是在android xml中看不到'position'类型的属性。

回答

42

您不能在Android上使用与HTML相同的方式使用精灵。有一种方法我可以想到模拟精灵:精灵完全水平(或垂直)放置,然后使用ClipDrawable将每个级别定义为精灵的新部分。然后酌情定义每个视图的级别。 (如果精灵中的图像大小不一样,则可能需要使用InsetDrawable。)

但是,我会认真地重新考虑在Android中使用精灵。网页使用精灵有很多原因,并不是因为它们更容易 - it's because it speeds up webpages because you don't have to make multiple HTTP requests。由于这些图像已经在您的发布APK中,因此您不会通过激活它们获得任何收益。

不仅如此,但你拼合通过在Android上做一些危害:

  1. 上一些Android手机内存的限制是比你想象的要低得多。如果在任何给定的时间你的图形全部在内存中,那么会降低你对其他所有内存的内存量。

  2. 一旦您开始编写不同的屏幕密度(ldpi,mdpi,hdpi),精灵将更难处理。

+4

,谢谢,我只是不会使用它们 – mattyp 2011-04-20 15:57:54

+0

事实上,精灵增加的内存使用情况往往被忽视。避免! – 2011-04-20 16:26:54

+0

你建议用什么来代替精灵呢?我知道openGL是为动画而建议的,但是如果我是一个非常简单的动画,比如一个简笔画走路怎么办。如果不是精灵表,应该如何说明呢? – uesports135 2016-03-12 13:47:22