在Android中,是否有 clean 方式只显示ImageView中位图的给定部分(例如精灵表的单个精灵),而不必:
例如,我尝试创建宽度/高度为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。
答案 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