在 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。