如何使谷歌地图标记可拖动

时间:2019-07-31 15:41:26

标签: java android google-maps

在我的Android项目中,我试图将Google地图的标记设为可拖动并捕获拖动事件。

这是代码正在使用:

    private BitmapDescriptor bitmapDescriptorFromVectorSourceLocation(Context context, @DrawableRes int vectorDrawableResourceId) {
        Drawable background = ContextCompat.getDrawable(context, R.drawable.marker_source_location);
        background.setBounds(0, 0, background.getIntrinsicWidth(), background.getIntrinsicHeight());
        Drawable vectorDrawable = ContextCompat.getDrawable(context, vectorDrawableResourceId);
        vectorDrawable.setBounds(40, 20, vectorDrawable.getIntrinsicWidth() + 40, vectorDrawable.getIntrinsicHeight() + 20);
        Bitmap bitmap = Bitmap.createBitmap(background.getIntrinsicWidth(), background.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        background.draw(canvas);
        vectorDrawable.draw(canvas);
        return BitmapDescriptorFactory.fromBitmap(bitmap);
    }

    public void onSourceLocationSelected(double sourceLocationLat, double sourceLocationLang) {
        LatLng sourceLocation = new LatLng(sourceLocationLat, sourceLocationLang);
        mMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
            @Override
            public void onMarkerDragStart(Marker arg0) {
                // TODO Auto-generated method stub
                Log.d("System out", "onMarkerDragStart..."+arg0.getPosition().latitude+"..."+arg0.getPosition().longitude);
            }

            @SuppressWarnings("unchecked")
            @Override
            public void onMarkerDragEnd(Marker arg0) {
                // TODO Auto-generated method stub
                Log.d("System out", "onMarkerDragEnd..."+arg0.getPosition().latitude+"..."+arg0.getPosition().longitude);

                mMap.animateCamera(CameraUpdateFactory.newLatLng(arg0.getPosition()));
            }

            @Override
            public void onMarkerDrag(Marker arg0) {
                // TODO Auto-generated method stub
                Log.i("System out", "onMarkerDrag...");
            }
        });

        mMap.addMarker(new MarkerOptions().position(sourceLocation).draggable(true)
                .title("Source Location")
                .icon(bitmapDescriptorFromVectorSourceLocation(this, R.drawable.marker_source_location))
                .draggable(true));
        float zoomLevel = (float) 15.0;
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sourceLocation, zoomLevel));

    }

如您所见,我已经为标记使用了自定义位图,然后尝试捕获拖动事件,还向标记选项中添加了.draggable(true) ..但是标记只是静态的,可以不能感动!!

0 个答案:

没有答案