在Android ImageView中显示spritesheet的一部分

时间:2013-06-07 22:40:29

标签: android imageview sprite

在Android中,是否有 clean 方式只显示ImageView中位图的给定部分(例如精灵表的单个精灵),而不必:

  • 手动将位图png拆分为小png(=> app中嵌入的更多drawables,繁琐的手动操作可能导致错误,或松散spritesheet)。
  • 在ImageViews中使用小png,生成精灵表(=>复杂)
  • 为ImageView,Drawable等创建“脏”子类(=>我们越多使用Android API“ASIS”越好)
  • 以编程方式创建大位图的子位图(=>我们必须以编程方式完成所有工作)

例如,我尝试创建宽度/高度为40dp的ImageView,并将其drawable设置为ClipDrawable,仅显示我想要的位图部分,但效果不佳:

  • 在创建ClipDrawable时使用Gravity.CENTER时,剪切的部分未填充父级。

  • 使用Gravity.FILL时显示整个“大”PNG。

此外,这个解决方案可以使用简单的精灵表(例如2 * 2精灵),但我不认为使用像4 * 4精灵表这样的东西。我认为ClipDrawable并不适合这种用途。

在OpenGL中是否有“清洁和简单”的东西,你可以设置纹理ID,并设置纹理坐标只显示纹理的一部分?考虑到我的研究,我认为最好的解决方案是使用Bitmap.createBitmap手动拆分大位图,而在开始之前我更愿意这样做。

PS:我考虑使用SpriteSheets因为OpenGl,虽然我的“菜单”是使用Android API开发的,因此使用ImageView。

1 个答案:

答案 0 :(得分:0)

你熟悉Canvas吗?我认为这是另一种适合你的方式。

您在内存中创建一个位图,然后使用drawBitmap只绘制您想要的当前块。

这是一个代码段from the manual

public void drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint)

此函数忽略与位图关联的密度。这是因为源和目标矩形坐标空间各自的密度,因此必须已经应用了适当的比例因子。

Parameters
bitmap  The bitmap to be drawn
src     May be null. The subset of the bitmap to be drawn
dst     The rectangle that the bitmap will be scaled/translated to fit into
paint   May be null. The paint used to draw the bitmap