2017-11-17 9 views
5

私はスクリーンショットのキャプチャについて多くの疑問があることを知り、それらのほとんどをチェックしました。彼らは同じ答えを持っています(小さなコードのバリエーションで)。スクリーンショットをキャプチャする方法は?

私はスクリーンショットをキャプチャする方法次ています

@NonNull 
public static Bitmap takeScreenShot(Window window) throws IOException { 
    final View rootView = window.getDecorView().getRootView(); 
    final boolean drawingCacheEnabled = rootView.isDrawingCacheEnabled(); 
    rootView.setDrawingCacheEnabled(true); 

    try { 
     return Bitmap.createBitmap(rootView.getDrawingCache()); 
    } finally { 
     rootView.setDrawingCacheEnabled(drawingCacheEnabled); 
    } 
} 

をそして、あなたはこれらのようにそれを使用することができます:takeScreenShot(getActivity().getWindow())

これらのアプローチはいくつかの制限がありますが:

  1. あなたには、いくつかのダイアログを使用している場合彼らは スクリーンショットでキャプチャされません。
  2. ハードウェアアクセラレーションビューでは機能しますか?ハードウェアアクセラレーションは、システムがフラグ

  3. スクリーンショットを無視加速
    異なる機構を使用するため
    描画キャッシュがレンダリングに影響を及ぼさない可能にする、オンにされると

    :ドキュメントへ に従ってGLviewsの代わりにブラックボックス が含まれています。 (たとえば、アプリにマップがある場合)。 2点目の結果と思われます。

私の質問には、少なくともいくつかの問題を解決できる根強い解決策はありませんか?

+0

私はダイアログを捕獲したいと思います –

答えて

関連する問題