无论你在哪里双击或捏缩放android,如何保持地图居中?

时间:2017-06-06 06:50:49

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

有人可以解释更多如何实现以及EventBus_singleton如何调用它?代码看起来很棒,但我坚持执行部分。

以下是代码:

  1. https://stackoverflow.com/a/32734436/8111914
  2. https://stackoverflow.com/a/33276343/8111914
  3. https://stackoverflow.com/a/31478257/8111914
  4. 0。活动 - > activity_maps.xml

        <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=".CustomMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MapsActivity" />
    

    1。类 - &gt; TouchableWrapper

     public class TouchableWrapper extends FrameLayout {
    
        GestureDetectorCompat mGestureDetector;
    
    
        public TouchableWrapper(Context context) {
            super(context);
            mGestureDetector = new GestureDetectorCompat(context, mGestureListener);
        }
    
    
        private final GestureDetector.SimpleOnGestureListener mGestureListener
                = new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onDoubleTap(MotionEvent e) {
                Log.e("GestureDetector", "Executed");
                //Notify the event bus (I am using Otto eventbus of course) that you have just received a double-tap event on the map, inside the event bus event listener
                EventBus_Singleton.getInstance().post(new EventBus_Poster("double_tapped_map"));
    
                return true;
            }
        };
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            mGestureDetector.onTouchEvent(ev);
            return super.onInterceptTouchEvent(ev);
        }
    
    
    }
    

    2。类 - &gt; EventBus_Singleton

    我已将Otto用于事件触发器。

    public class EventBus_Singleton {
    
        private static final Bus BUS = new Bus();
    
        public static Bus getInstance() {
            return BUS;
        }
    
        public EventBus_Singleton() {
        }
    
        public void post(String s) {
            BUS.post(s);
        }
    }
    

    第3。类 - &gt; EventBus_Poster

    public class EventBus_Poster {
        public final String string;
    
        EventBus_Poster(String string) {
            this.string = string;
        }
    }
    

    现在的问题是我在使用下面的代码时如何在My Map Activity中实现上面的代码:

     @Subscribe
        public void EventBus_singleton(EventBus_Poster event) {
            Log.e("EventBus_singleton", "Executed");
            if (event != null && event.string.equals("double_tapped_map")) {
                if (mapFragment != null) {
                    mapFragment.getMap().getUiSettings().setZoomGesturesEnabled(false);
                    mapFragment.getMap().getUiSettings().setRotateGesturesEnabled(false);
    
                    mapFragment.getMap().setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
                        @Override
                        public void onCameraChange(CameraPosition cameraPosition) {
                            LatLng lng = cameraPosition.target;
                            Log.e("LatLng", "" + lng);
                        }
                    });
                    mapFragment.getMap().animateCamera(CameraUpdateFactory.zoomIn(), 400, null);
                }
    
            }
        }
    
    
    private final ScaleGestureDetector.OnScaleGestureListener mScaleGestureListener
            = new ScaleGestureDetector.SimpleOnScaleGestureListener() {
        /**
         * This is the active focal point in terms of the viewport. Could be a local
         * variable but kept here to minimize per-frame allocations.
         */
    
        float startingSpan;
        float startFocusX;
        float startFocusY;
    
        @Override
        public boolean onScaleBegin(ScaleGestureDetector scaleGestureDetector) {
            startingSpan = scaleGestureDetector.getCurrentSpan();
            startFocusX = scaleGestureDetector.getFocusX();
            startFocusY = scaleGestureDetector.getFocusY();
    
            return true;
        }
    
        @Override
        public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
            float scale = scaleGestureDetector.getCurrentSpan() / startingSpan;
    
            mVelocityTracker.computeCurrentVelocity(1000);
    
            Log.d("VELOCITY", "X vel : " + mVelocityTracker.getXVelocity());
            Log.d("VELOCITY", "Y vel : " + mVelocityTracker.getYVelocity());
    
            if (scale <= 1.0) {
                EventBus_Singleton.getInstance().post(new EventBus_Poster("pinched_map", "out"));
            } else {
                EventBus_Singleton.getInstance().post(new EventBus_Poster("pinched_map", "in"));
            }
    
            return true;
        }
    };
    

    并且请不要将其标记为重复或任何内容,因为它是要求不完整代码实施代码的真正问题。

0 个答案:

没有答案