9

出力を提供しているこの回答のコードを使用して 、 Googleマップv2のスクリーンショットを撮っています:

ここに画像の説明を入力

マップのスクリーンショットを撮っても問題ありません

次のコードを使用すると、黒いマップ画面でレイアウトのスクリーンショットを撮ることができます。これは、次のコードのように問題ありません。マップはスクリーンショットで黒くなります

String mPath = Environment.getExternalStorageDirectory().toString()
                + "/" + "myTestScr" + System.currentTimeMillis() + ".jpeg";
Bitmap bitmap;
        View v1 = (View) findViewById(R.id.rootviewtest);
        v1.setDrawingCacheEnabled(true);
        bitmap = Bitmap.createBitmap(v1.getDrawingCache());
        v1.setDrawingCacheEnabled(false);

        OutputStream fout = null;
        File imageFile = new File(mPath);

        try {
            fout = new FileOutputStream(imageFile);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
            fout.flush();
            fout.close();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

上記のコードの出力:

ここに画像の説明を入力

私が実際に必要なものは次のとおりです。

ここに画像の説明を入力

では、 3rd Screenのような出力を取得するにはどうすればよいかという質問programmaticallyです。

両方 (1 と 2) の画面を結合して 1 つのスクリーン ショットを撮るのを手伝ってくださいprogrammatically

またはprogrammatically両方(1と2)のスクリーンショットを撮った後に両方の画像をマージする他の代替手段はありますか?

4

2 に答える 2

21

次のメソッドを呼び出して、マップ付きのスクリーンショットを撮ります。

public void captureMapScreen() {
        SnapshotReadyCallback callback = new SnapshotReadyCallback() {

            @Override
            public void onSnapshotReady(Bitmap snapshot) {
                try {
                    mView.setDrawingCacheEnabled(true);
                    Bitmap backBitmap = mView.getDrawingCache();
                    Bitmap bmOverlay = Bitmap.createBitmap(
                            backBitmap.getWidth(), backBitmap.getHeight(),
                            backBitmap.getConfig());
                    Canvas canvas = new Canvas(bmOverlay);
                    canvas.drawBitmap(snapshot, new Matrix(), null);
                    canvas.drawBitmap(backBitmap, 0, 0, null);
                    FileOutputStream out = new FileOutputStream(
                            Environment.getExternalStorageDirectory()
                                    + "/MapScreenShot"
                                    + System.currentTimeMillis() + ".png");

                    bmOverlay.compress(Bitmap.CompressFormat.PNG, 90, out);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };

        mMap.snapshot(callback);

    }

mviewはレイアウトのルート ビューでありmMap、マップ フラグメントです。

Google Play Services最新のAPIを使用していることを確認してください。

mView.setDrawingCacheEnabled(true);
Bitmap backBitmap = mView.getDrawingCache();
Bitmap bmOverlay = Bitmap.createBitmap(
backBitmap.getWidth(), backBitmap.getHeight(),
backBitmap.getConfig());
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(snapshot, new Matrix(), null);
canvas.drawBitmap(backBitmap, 0, 0, null);

snapshot.compress(Bitmap.CompressFormat.PNG, 90, out);マップのスクリーンショットのみが必要な場合は、これらの行をスキップして使用します。

于 2013-08-22T05:54:35.730 に答える