1

在 Android 中,是否有一种简洁的方法可以在 ImageView 中仅显示位图的给定部分(例如精灵表的单个精灵),而不必:

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

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

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

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

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

在 OpenGL 中是否有一些“干净和简单”的东西,您可以在其中设置纹理 ID,并将纹理坐标设置为仅显示纹理的一部分?考虑到我的研究,我认为最好的解决方案是使用 Bitmap.createBitmap 手动分割大位图,当我宁愿在开始类似的事情之前先询问时。

PS:由于 OpenGl,我考虑使用 SpriteSheets,尽管我的“菜单”是使用 Android API 开发的,因此使用 ImageView。

4

1 回答 1

0

你对画布很熟悉吗?我认为这是另一种适合您的方式。

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

这是手册中的一个片段:

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 
于 2013-06-08T01:51:33.113 回答