0

レイアウト全体linearlayoutまたは他のレイアウトをビットマップに変換できますか?私のコードはこれです:

LinearLayout view = (LinearLayout)findViewById(R.id.linear_parent);
view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

Bitmap bm = view.getDrawingCache();

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

問題は、レイアウトが画面サイズよりも大きい場合、現在画面には表示されていないがレイアウトの一部であるテキストビューなどのコンテンツ全体ではなく、画面に表示されるものだけを取得することです。

どんな提案もそこにオタクです。これは緊急かつ重要な方法です。

4

2 に答える 2

0

ビットマップを取得する前に、サイズを設定してみることができます。次のコードを使用して Bitmap を取得し、試してください。

LinearLayout view = (LinearLayout)findViewById(R.id.linear_parent);
view.setDrawingCacheEnabled(true);
view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); 
view.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false); // clear drawing cache
于 2013-02-15T10:38:44.313 に答える
0

それは簡単です。ビューをビットマップに保存しようとしていると仮定します。これが私の完全な保存方法です。チェックして、どのように機能するかを確認してください。

void Save() {
    if (null != view.getDrawable()) {
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        save = view.getDrawingCache();
        final File myDir = new File(folder);
        myDir.mkdirs();
        final Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        final String fname = "StyleMe-" + n + ".png";
          file = new File(myDir, fname);
        if (file.exists())
            file.delete();
        try {
            final FileOutputStream out = new FileOutputStream(file);
            save.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                    Uri.parse("file://"
                            + Environment.getExternalStorageDirectory())));
            Toast.makeText(getApplication(), "Image Saved",
                    Toast.LENGTH_SHORT).show();
        } catch (final Exception e) {
            Toast.makeText(getApplication(),
                    "Something Went Wrong check if you have Enough Memory",
                    Toast.LENGTH_LONG).show();
        }
    } else {
        final Toast tst = Toast.makeText(getApplication(),
                "Please Select An Image First", Toast.LENGTH_LONG);
        tst.setGravity(Gravity.CENTER, 0, 0);
        tst.show();
    }
    view.setDrawingCacheEnabled(false);
}

画像を保存するフォルダ名です。

    String folder = "/sdcard/Pictures/StyleMe";

StyleMe をアプリ名または好きな名前に変更できます。これが私のファイルで、クラス名の下で両方を宣言するだけです。または、メソッド内に追加するだけですstatic File file;

于 2013-02-23T09:15:41.840 に答える