我正在使用 Google Maps Android API v2,我希望能够在点击(或双击)时全屏打开小地图(= 我认为的 SupportMapFragment)。
这在技术上可行吗?如果是,如何实现?
提前致谢。
我正在使用 Google Maps Android API v2,我希望能够在点击(或双击)时全屏打开小地图(= 我认为的 SupportMapFragment)。
这在技术上可行吗?如果是,如何实现?
提前致谢。
是的,这绝对是可能的。
例如,您可以有一个 Button,按下 Button后,MapFragment / SupportMapFragment 将被添加到Activity 布局文件内的容器布局中。
在 Button 的 onClick 方法中,将 Fragment 添加到容器布局中:
YourMapFragment f = new YourMapFragment();
getFragmentManager().beginTransaction().add(R.id.container_layout, f).commit();
在这种情况下,我建议 "container_layout" 是一个空的FrameLayout,用作 Activity 布局文件中的占位符。这就是 Fragment 将出现的地方。
如果您真的想使用 Taps,您可以通过以下方式识别例如双击:
界面:
public interface GestureInterface {
/**
* returns the recognized gesture from the touchmanager
* and enables the user of the interface to react to the gesture (or not)
* @param gesture e.g. TouchManager.SWIPE_LEFT
*/
public void onGestureRecognized(int gesture);
}
触摸管理器:
public class TouchManager extends GestureDetector.SimpleOnGestureListener {
public static final int DOWN = 1;
public static final int DOUBLE_TAP = 2;
/** the class that initialized the gesture-recognizer and will be notified upon gestures made by the user */
private GestureInterface caller;
/**
* constructor
* @param the caller that implements the gestureinterface
*/
public TouchManager(GestureInterface caller) {
this.caller = caller;
}
/**
* you need this shit to return true, otherwise gestures wont work
*/
@Override
public boolean onDown(MotionEvent e) {
caller.onGestureRecognized(DOWN);
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
caller.onGestureRecognized(DOUBLE_TAP); // callback
return true;
}
}
在您的 Activity 内部(或 Customview 或您想要识别手势的任何位置):(在这种情况下,点击 Activity 将调用 Touchmanager。
public class YourActivity extends Activity implements GestureInterface {
private GestureDetector gd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourlayout);
// initialize the touch manager
gd = new GestureDetector(this, new TouchManager(this));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gd.onTouchEvent(event);
}
@Override
public void onGestureRecognized(int gesture) {
// react to callbacks
switch (gesture) {
case TouchManager.DOUBLE_TAP:
// do something
YourMapFragment f = new YourMapFragment();
getFragmentManager().beginTransaction().add(R.id.container_layout, f).commit();
break;
}
}
}
无论您想在哪里识别手势,都返回 GestureDetector.onTouchEvent(...)。