有人可以解释更多如何实现以及EventBus_singleton如何调用它?代码看起来很棒,但我坚持执行部分。
以下是代码:
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;
}
};
并且请不要将其标记为重复或任何内容,因为它是要求不完整代码实施代码的真正问题。