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

Java 如何使谷歌地图标记可拖动,java,android,google-maps,Java,Android,Google Maps,在我的Android项目中,我试图让谷歌地图的标记可以拖动,并捕捉拖动事件 以下是我使用的代码: private BitmapDescriptor bitmapDescriptorFromVectorSourceLocation(Context context, @DrawableRes int vectorDrawableResourceId) { Drawable background = ContextCompat.getDrawable(context, R.dr

在我的Android项目中,我试图让谷歌地图的标记可以拖动,并捕捉拖动事件

以下是我使用的代码:

    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)
。。但是标记是静态的,不能移动

你的代码在我这边有效。这个标记当然是可以拖动的。我建议您再次检查标记源位置和lat/lng是否有效,并重新构建应用程序并再次测试。如果您的标记仍然无法拖动,请发布您的完整代码和可能出现的任何错误,因为从我的立场来看,您的代码是很好的。