拍摄地图活动的问题

时间:2017-01-01 18:31:39

标签: android google-maps screenshot

我已经在我的活动中集成了一张地图,现在我想截取地图位置的截图但它没有正确截取屏幕截图它只是在屏幕截图中显示谷歌徽标 这是我的xml

<RelativeLayout
android:id="@id/activity_main"
android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.apple.emergency.MapsActivity" />
 </Relativelayout>

和java类代码

 public class MapsActivity extends FragmentActivity implements            OnMapReadyCallback {

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}


/**
 * Manipulates the map once available.
 * This callback is triggered when the map is ready to be used.
 * This is where we can add markers or lines, add listeners or move the camera. In this case,
 * we just add a marker near Sydney, Australia.
 * If Google Play services is not installed on the device, the user will be prompted to install
 * it inside the SupportMapFragment. This method will only be triggered once the user has
 * installed Google Play services and returned to the app.
 */
@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in sudney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
 //   googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new  LatLng(34,15),1));
takeScreenshot();
}
 public Bitmap takeScreenshot() {
    View rootView = findViewById(R.id.activity_main).getRootView();

    rootView.setDrawingCacheEnabled(true);
    return rootView.getDrawingCache();
}
}

1 个答案:

答案 0 :(得分:0)

 mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
        public void onMapLoaded() {
            mMap.snapshot(new GoogleMap.SnapshotReadyCallback() {
                public void onSnapshotReady(Bitmap bitmap) {
                    // Write image to disk
                 //   FileOutputStream out = new FileOutputStream("/mnt/sdcard/map.png");
                   // bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
                    shareBitmap(bitmap,"my location");
                }
            });
        }
    });
}

分享

private void shareBitmap (Bitmap bitmap,String fileName) {
    try {
        File file = new File(getBaseContext().getCacheDir(), fileName + ".png");
        FileOutputStream fOut = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.PNG.PNG, 100, fOut);
        fOut.flush();
        fOut.close();
        file.setReadable(true, false);
        final Intent intent = new Intent(     android.content.Intent.ACTION_SEND);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
        intent.setType("image/png");
        startActivity(intent);
    } catch (Exception e) {
        e.printStackTrace();
    }

}