XMLで、LinearLayoutの下層すべてを画像として取り込みたいと考えています。
getDrawingCache()を使用してImageButtonなどを指定すると正しくbitmapが返ってきますが、背景付LinearLayoutのIDを指定するとnullが返ってきます。(android:R.id.contentでも同様)
以下初期状態のhello World!に張り付けたテストコードでは正しく動作、360kbほどの背景やその他ボタンを表示している本コードへそのままコピーすると指定IDがcontentやLinearLayoutではnullが返ります。
*また、背景画像のサイズをいくらか落とした場合黒い画像が出力されることがありました。
*テストコードは起動するとXMLをJPGへ変換してメール送信する。
*本コードのXMLではScrollView>LinearLayout>HorizontalScrollView>LinearLayoutという構造になっています。
よろしくお願いいたします。
*getDrawingCacheの前にview.buildDrawingCache(true);を入れてみましたが駄目でした。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// パスを指定してファイルを読み込む File file = new File(Environment.getExternalStorageDirectory() + "/capture.jpeg"); file.getParentFile().mkdir(); saveCapture(findViewById(android.R.id.content),file);
★本コードでは↑これをR.id.LinearLayout1へ変更しています。
// メールアプリを起動
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"example@mail.com"});
intent.setType("message/rfc822");
// 添付ファイルを指定
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
startActivity(intent);
}
//画面キャプチャ public Bitmap getCache(View view){ view.setDrawingCacheEnabled(true); view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); Bitmap cache = view.getDrawingCache();
★↑ここでcacheにnullが返ります
Bitmap scrnsht = Bitmap.createBitmap(cache);
view.setDrawingCacheEnabled(false);
return scrnsht;
}
//フォーマットと保存
public void saveCapture(View view,File file){
Bitmap capture = getCache(view);
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(file, false);
capture.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if(fos !=null){
try{
fos.close();
}catch(IOException ie){
fos = null;
}
}
}
}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/06 14:09