LoginSignup
1
1

More than 5 years have passed since last update.

【Android】Webから9-patch画像を取得すると端末が9-patchとして認識してくれない件

Last updated at Posted at 2016-07-20

やりたいこと

  1. WebにおいてあるZipファイルをダウンロードする(この中にはアプリで使用する画像群やカラーの値が入っている)
  2. ダウンロードしてきたZipを展開する
  3. Fileで保存する
  4. 保存されたファイルから画像や値を引いて使用する

この順序を実装してく中で(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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1