1

我正在使用 Google Maps Android API v2,我希望能够在点击(或双击)时全屏打开小地图(= 我认为的 SupportMapFragment)。

这在技术上可行吗?如果是,如何实现?

提前致谢。

4

1 回答 1

0

的,这绝对是可能的。

例如,您可以有一个 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,您可以通过以下方式识别例如双击

  • 您将需要一个需要识别手势的类必须实现的接口
  • 您需要一个自定义的 TouchManager,它将使用接口的回调来解释手势

界面:

    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(...)。

于 2013-09-06T17:43:03.593 回答