Android では、ビットマップの特定の部分 (たとえば、スプライト シートの 1 つのスプライト) のみを ImageView に表示するクリーンな方法はありますか?
- ビットマップ png を手動で小さな png に分割します (=> アプリに埋め込まれたドローアブルが増える、面倒な手動操作がバグにつながる可能性がある、またはスプライトシートが失われる)。
- ImageViews で小さな png を使用し、スプライト シートを生成する (=> 複雑)
- ImageView、Drawable などの「汚い」サブクラスを作成します (=> Android API「ASIS」を使用すればするほど良い)
- 大きなビットマップのサブビットマップをプログラムで作成します (=> すべての作業をプログラムで行う必要があります)
たとえば、幅/高さが 40 dp の ImageView を作成し、そのドローアブルを、必要なビットマップの部分のみを表示する ClipDrawable として設定しようとしましたが、うまくいきませんでした:
ClipDrawable の作成時に Gravity.CENTER を使用すると、クリップされた部分が親を埋めませんでした。
Gravity.FILL を使用すると、「大きな」PNG 全体が表示されました。
さらに、このソリューションは単純なスプライト シート (たとえば 2*2 スプライト) で実行可能ですが、4*4 スプライト シートのようなものを使用する場合は可能ではないと思います。ClipDrawable はそのような用途には向いていないと思います。
テクスチャ ID を設定し、テクスチャ座標を設定してテクスチャの一部のみを表示できる OpenGL のような「クリーンで簡単」なものはありませんか? 私の研究を考えると、そのようなことを始める前に尋ねたいときは、Bitmap.createBitmapで大きなビットマップを手動で分割するのが最善の解決策だと思います。
PS : OpenGl のために SpriteSheets を使用することを検討していますが、私の「メニュー」は Android API を使用して開発されているため、ImageView を使用しています。