すると、困ったことに、アプリから隠しAPIであるSurface.screenshot()を用いてスクリーンキャプチャをとろうとした時に、縦におしつぶされたようなキャプチャ画像となってしまう。これは困った。
そこで、こんなページにぶちあたった。
画面サイズを攻略して機種依存を吸収する
このページでは丁寧にAPIレベルを見て分岐させているが、
getRawSizeというメソッド、じつはICSくらいから実装されている。
ということは・・・
こんなかんじで、思ったよりは簡単にかけるわけだ。
private Point getDisplaySize(Display display){ Point p = new Point(); try { Method getRealSize = Display.class.getMethod("getRealSize", Point.class); getRealSize.invoke(display, p); } catch (Exception e) { Log.e(TAG,e.getMessage()); } return p; }
実際にNexus 7(Android 4.2.1)で実行させたところ、ちゃんと歪みのないキャプチャがとれた。
ここまでできれば、あとは、getSizeのheightとgetRawSizeのheightの差分から、ナビゲーションバーの部分を消す、といったことができる。
スクリーンショットのスクリーンショットのスクリーンショットのスクリーンショットを取ってみたらこんな感じ(笑)