0

私のアプリケーションでは、レイアウトをズームするときにレイアウトをズームしています。レイアウトをキャプチャしたいのですが、以下のコードを試しましたが、画面に表示されているコンテンツのみをキャプチャしています。レイアウトをキャプチャする方法を教えてください。

       View content = findViewById(R.id.main_container);
    content.setDrawingCacheEnabled(true);
    Bitmap bitmap = content.getDrawingCache();
    // actual width of the image (img is a Bitmap object)
    // int width = bitmap.getWidth();
    // int height = bitmap.getHeight();

    // recreate the new Bitmap and set it back

        bitmap = Bitmap.createBitmap(Bitmap.createBitmap(
                l1.getWidth() * 2, l1.getHeight() * 2,
                Bitmap.Config.ARGB_8888));


    // Bitmap mb = bitmap.copy(Bitmap.Config.ARGB_8888, true);
    Canvas bitmapCanvas = new Canvas();
    bitmapCanvas.setBitmap(bitmap);
    bitmapCanvas.scale(2.0f, 2.0f);
    content.draw(bitmapCanvas);
    ByteArrayOutputStream out = new ByteArrayOutputStream();

    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

    File imagesFolder = new File(Environment.getExternalStorageDirectory(),
            "saved_images");
    imagesFolder.mkdirs();
    String fileName = "final-" + String.valueOf(n) + ".jpg";
    File output = new File(imagesFolder, fileName);
    while (output.exists()) {
        n++;
        fileName = "final-" + String.valueOf(n) + ".jpg";
        output = new File(imagesFolder, fileName);
    }
    Uri uriSavedImage = Uri.fromFile(output);
    OutputStream imageFileOS;
    try {
        imageFileOS = getContentResolver().openOutputStream(uriSavedImage);
        imageFileOS.write(out.toByteArray());
        imageFileOS.flush();
        imageFileOS.close();




    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    content.setDrawingCacheEnabled(false);
4

1 に答える 1

0

レイアウトのスクリーンショットを取得する別の方法を次に示します。これは私の頭から書いているので、コードにエラーが含まれている可能性があります (現在は確認できません)。

ViewGroup bg = (ViewGroup) findViewById(R.id.your_layout_id);
Bitmap screenshot = Bitmap.createBitmap(vg.getWidth(), vg.getHeight(),
                                        Bitmap.Config.RGBA8888);
Canvas c = new Canvas(screenshot);
vg.draw(c);

これがうまく機能するかどうかはわかりませんが、少なくともドキュメントに従って何かを描画する必要があります。

于 2013-04-20T06:31:51.000 に答える