无法将截图截取到包含折线的地图中

时间:2016-09-14 17:32:53

标签: android google-maps-android-api-2

我正在创建一个跟踪用户路径并在路径上绘制折线的应用。我的问题是,当用户完成他的轨道并按下停止时,地图缩小以包含整个折线,但它不会截取屏幕截图(当我调试时,它会跳过屏幕截图的代码并且不会执行它)。 / p>

我的问题是如何将截图截取到包含整个折线的地图

我的代码

 stopButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                LatLngBounds.Builder builder= new LatLngBounds.Builder();
                List<LatLng> latLngs = new ArrayList<LatLng>();
                latLngs = polylineOptions.getPoints();
                for(LatLng latLng : latLngs){
                    builder.include(latLng);
                }
                LatLngBounds bounds = builder.build();
                int padding = 100;
                CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds,padding);
                mMap.animateCamera(cameraUpdate);
                final Intent[] intent = new Intent[1];
                intent[0] = new Intent(getApplicationContext(),Results_Activity.class);

                mMap.snapshot(new GoogleMap.SnapshotReadyCallback() {
                            @Override
                            public void onSnapshotReady(Bitmap bitmap) {

                                intent[0].putExtra("image",bitmap);


                            }
                        });

                startActivity(intent[0]);

            }
        });

2 个答案:

答案 0 :(得分:0)

看起来你正在调用startActivity(intent [0]);在mMap.snapshot有机会完成回调之前。尝试移动startActivity(intent [0]);直接在intent [0] .putExtra(&#34; image&#34;,bitmap)之后;

答案 1 :(得分:0)

我设法截取屏幕截图并使用此代码将其发送到第二个活动

首次活动中的代码

stopButton.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {


                LatLngBounds.Builder builder= new LatLngBounds.Builder();
                List<LatLng> latLngs = new ArrayList<LatLng>();

                if(polylineOptions.getPoints()!= null){
                    latLngs = polylineOptions.getPoints();
                    for(LatLng latLng : latLngs){
                        builder.include(latLng);
                    }
                    LatLngBounds bounds = builder.build();
                    int padding = 100;
                    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds,padding);
                    mMap.animateCamera(cameraUpdate);
                }

                intent[0] = new Intent(getApplicationContext(),Results_Activity.class);

                final SnapshotReadyCallback callback = new SnapshotReadyCallback() {
                    @Override
                    public void onSnapshotReady(Bitmap snapshot) {
                        Bitmap image = snapshot;
                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        image.compress(Bitmap.CompressFormat.PNG, 100, stream);
                        byte[] byteArray = stream.toByteArray();
                        intent[0].putExtra("picture", byteArray);
                        startActivity(intent[0]);
                    }
                };

                mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
                    @Override
                    public void onMapLoaded() {
                        mMap.snapshot(callback);

                    }
                });

                return false;
            }
        });

第二项活动中的代码

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_results_);


        Bundle extras = getIntent().getExtras();
        byte[] byteArray = extras.getByteArray("picture");

        Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

        mapPreview = (ImageView) findViewById(R.id.TrackimageView);
        mapPreview.setImageBitmap(bitmap);

    }