5

LinearLayout の内容のスクリーンショットを撮ろうとしています。レイアウトには、高さ/幅を可変できるスクロールビューが含まれています。このコードは、レイアウトが大きすぎない場合 (つまり、すべてを表示するために画面からあまりスクロールする必要がない場合) に問題なく機能します。

View v1 = (LinearLayout)theLayout;

v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);

ただし、キャプチャしようとしている LinearLayout が大きい場合、アプリケーションは v1.getDrawingCache() の null ポインターでクラッシュします。

logcat に次のエラーがあります。

05-11 13:16:20.999: W/View(17218): ビューが大きすぎて描画キャッシュに収まりません。4784400 バイトが必要ですが、3932160 しか使用できません

このレイアウトのスクリーンショットを適切に撮る​​にはどうすればよいですか? それほど多くのメモリを使用しない別の方法はありますか?

4

2 に答える 2

1

元の質問は ScrollView について話しているので、完全な高さを取得するのに問題がある人のために次を追加します。ScrollView の高さを取得するには、v.getHeight が機能しないため、以下を使用する必要があります。

v.getChildAt(0).getHeight()

したがって、完全なものは次のようになります。

ScrollView scrollView = (ScrollView) result.findViewById(R.id.ScrlView);

loadBitmapFromView(scrollView);

public static Bitmap loadBitmapFromView(View v) 
{
int height = v.getChildAt(0).getHeight()
int width = v.getWidth()
Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

Canvas c = new Canvas(b);
v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
v.draw(c);
return b;
}

v.getHeight を使用するだけで、ScrollView の高さ全体ではなく、画面の高さを取得できます。

于 2014-04-06T23:03:31.190 に答える