【Android】Webから9-patch画像を取得すると端末が9-patchとして認識してくれない件
やりたいこと
- WebにおいてあるZipファイルをダウンロードする(この中にはアプリで使用する画像群やカラーの値が入っている)
- ダウンロードしてきたZipを展開する
- Fileで保存する
- 保存されたファイルから画像や値を引いて使用する
この順序を実装してく中で(4)のタイミングで「9-patchが効いてねえ。。」「え!てっきり拡張子で判断しているのかと。。」
という壁にぶつかって解消するまでの流れを記載して行きます。
9-patchってAndroidはどうやって認識してるんだ?
https://github.com/android/platform_frameworks_base/blob/master/graphics/java/android/graphics/drawable/Drawable.java
まず調べる必要があったのはこの部分。AOSPのDrawable.javaから該当部を見つけました。
Drawableを取得する際にはその画像の9patch情報(chunk)を見てNinePatchDrawableなのかBitmapDrawableなのかを返している。
その「chunk」が厄介で、結果を見ると一度コンパイラを通さないと生成されない。
さてどうしよう。。
「コンパイラを通さないと9-patchとして認識してくれない。。」
結論から言うと、一度コンパイルしてbinから取得してきた9patch画像をZipに入れることにしました。(運用としてちょっと面倒だけど。。)
これで正しく表示させることができました。
別案(未検証)
/frameworks/base/tools/aapt/Images.cpp
を持ってきて、
read_png→do_9patchてやれば、9patch化できるだろうけど、、
https://github.com/cozybit/aosp-frameworks-base/blob/master/tools/aapt/Images.cpp
Author And Source
この問題について(【Android】Webから9-patch画像を取得すると端末が9-patchとして認識してくれない件), 我々は、より多くの情報をここで見つけました https://qiita.com/kohirose/items/e6abbc9e6bfc2e84d3a8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .