現在、Googleマップv2のスクリーンショットを撮る方法という1つの問題に悩まされています。GPS追跡用のアプリケーションを1つ開発しています.1つのポリラインが追跡されたパスを描いています。そのため、マップ上にポリラインが描かれたマップのスクリーンショットも必要です。
私は多くの研究開発を行ってきましたが、Google マップ V2 にはそのような機能が提供されていないことがわかりました。
この問題を解決するために私を助けてください。
現在、Googleマップv2のスクリーンショットを撮る方法という1つの問題に悩まされています。GPS追跡用のアプリケーションを1つ開発しています.1つのポリラインが追跡されたパスを描いています。そのため、マップ上にポリラインが描かれたマップのスクリーンショットも必要です。
私は多くの研究開発を行ってきましたが、Google マップ V2 にはそのような機能が提供されていないことがわかりました。
この問題を解決するために私を助けてください。
v2 を使用しているため、マップは MapFragment または SupportMapFragment のいずれかで管理されます。どちらもgetView()へのアクセスを提供する Fragment のサブクラスです。ホスティング アクティビティに次のコードがあるとします。
SupportMapFragment mapFragment = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map));
View view = mapFragment.getView();
そのビューでは、このアプローチを試すことができますAndroid でプログラムでスクリーンショットを撮るには? .
私はこの投稿に基づいています: GoogleMap Android API V2のスクリーンショットをキャプチャ
そして、問題なくオーバーレイ付きのマップのスクリーンショットを取得することができました:
コードは次のとおりです。
public void captureScreen()
{
GoogleMap.SnapshotReadyCallback callback = new GoogleMap.SnapshotReadyCallback()
{
@Override
public void onSnapshotReady(Bitmap snapshot) {
try {
getWindow().getDecorView().findViewById(android.R.id.content).setDrawingCacheEnabled(true);
Bitmap backBitmap = getWindow().getDecorView().findViewById(android.R.id.content).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);
OutputStream fout = null;
String filePath = System.currentTimeMillis() + ".jpeg";
try
{
fout = openFileOutput(filePath,
MODE_WORLD_READABLE);
// Write the string to the file
bmOverlay.compress(Bitmap.CompressFormat.JPEG, 90, fout);
fout.flush();
fout.close();
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
Log.d("ImageCapture", "FileNotFoundException");
Log.d("ImageCapture", e.getMessage());
filePath = "";
}
catch (IOException e)
{
// TODO Auto-generated catch block
Log.d("ImageCapture", "IOException");
Log.d("ImageCapture", e.getMessage());
filePath = "";
}
openShareImageDialog(filePath);
} catch (Exception e) {
e.printStackTrace();
}
}
};
;
map.snapshot(callback);
}
次に、ソーシャル メディアの共有に次の方法を使用します。
public void openShareImageDialog(String filePath)
{
File file = this.getFileStreamPath(filePath);
if(!filePath.equals(""))
{
final ContentValues values = new ContentValues(2);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
final Uri contentUriFile = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
final Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setType("image/jpeg");
intent.putExtra(android.content.Intent.EXTRA_STREAM, contentUriFile);
startActivity(Intent.createChooser(intent, "Share Image"));
}
else
{
//This is a custom class I use to show dialogs...simply replace this with whatever you want to show an error message, Toast, etc.
// DialogUtilities.showOkDialogWithText(this, R.string.shareImageFailed);
Toast.makeText(getBaseContext(),"Se pelo",Toast.LENGTH_SHORT).show();
}
}