Androidの開発では、画面を傍受する必要がある場合がありますが、今回は問題が発生します。画面全体ではなく、1つの領域だけが必要な場合はどうなりますか?
最初は、画面全体をキャプチャしてからトリミングすることを考えました。しかし、DrawingCacheについて知るまでは、面倒でした。DrawingCacheを使用して画面領域の一部をキャプチャする方法を共有しましょう。
AndroidのすべてのスペースはViewクラスを継承し、Viewクラスは実際には独自のビットマップをインターセプトする機能を提供します。ビューのビットマップを取得することで、画面の一部をインターセプトする機能を実現できます。主に以下の方法がありますが、一つずつ紹介していきます
void setDrawingCacheEnabled(boolean flag)、//画像キャッシュを開き、内部でbuildDrawingCacheメソッドを呼び出します
ビットマップgetDrawingCache(boolean autoScale)、//キャッシュされた画像を取得する
void buildDrawingCache(boolean autoScale)、//画像キャッシュを再構築し、内部でdestroyDrawingCacheを呼び出して、元の画像キャッシュを破棄します
void destroyDrawingCache()、//画像キャッシュを破棄します
使用する方法は2つあります
最初
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
原理は次のように説明されています。
setDrawingCacheEnabled(true)内部呼び出しbuildDrawingCache()FIGの再構築されたフラグメントキャッシュのメソッド
DrawingCacheによって取得されたビットマップは無効にされた後にリサイクルされるため、Bitmap.createBitmap()を介してバックアップが必要です。
キャッシュを取得すると一定量のメモリが消費されるため、最後にクリーンアップする必要があります。setDrawingCacheEnabled(false)は、 destroyDrawingCache()メソッドを内部的に呼び出してクリーンアップします
二番目
view.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.destroyDrawingCache();
これは前のコードのコアコードとして理解できます。ビューイメージキャッシュを取得する手順は主に次のとおりであることがわかります。
ビルド-取得およびキャッシュ-破棄
最後に注意を払う必要があります!!!
ビューは、onCreateメソッドで独自の幅と高さを初期化していません。
したがって、getDrawingCache()メソッドは空を返します。
つまり、ここではコントロールの画像を取得できません。