在 android 上使用图像精灵

Posted

技术标签:

【中文标题】在 android 上使用图像精灵【英文标题】:Using image sprites on android 【发布时间】:2011-08-09 15:06:57 【问题描述】:

我有一个图像 (588x449) 精灵,其中包含一组不同的团队徽标。在 android 中,我有相应的 ImageView 显示:

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

上面将在左上角正确显示我的图像。我的问题是我希望能够移动正在显示的图像中的位置,以便可以跳转到精灵中的另一个区域。这是 html/css 中很常见的做法,我只是在 android xml 中没有看到“位置”类型属性。

【问题讨论】:

【参考方案1】:

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

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

不仅如此,您在 Android 上使用 spriting 也会造成一些伤害:

    某些 Android 手机的内存限制远低于您的预期。如果您的整个图形在任何给定时间都在内存中,则会降低您用于其他所有内容的内存量。

    一旦您开始为不同的屏幕密度(ldpi、mdpi、hdpi)编写,Sprite 将更难处理。

【讨论】:

确实,精灵增加的内存使用量经常被忽视。避免! 那你建议用什么来代替精灵呢?我知道 openGL 被建议用于动画,但如果我是一个非常简单的动画,比如一个简笔画行走。如果不是精灵表,应该如何说明?

以上是关于在 android 上使用图像精灵的主要内容,如果未能解决你的问题,请参考以下文章

市面上有一款android的按键精灵,他是基于啥原理实现的实现

Android:从位图裁剪位图并设置为 ImageView src

Android:如何根据目的地坐标旋转移动的动画精灵

带有精灵表的 Android 动画

解决按键精灵助手无法连接Android手机的问题

在手机上哪个是更好的选择.. 应用程序的精灵或单个图像文件