1

私は Google Maps Android API v2 を使用しており、タップ (またはダブルタップ) で小さな地図 (= 私のビューでは SupportMapFragment) をフルスクリーンで開くことができるようにしたいと考えています。

これは技術的に可能ですか?はいの場合、それを達成する方法は?

前もって感謝します。

4

1 に答える 1

0

はい、それは間違いなく可能です。

たとえば、ボタンを持つことができ、ボタンを押すと、アクティビティのレイアウト ファイル内のコンテナー レイアウトに MapFragment / SupportMapFragment が追加されます。

Button の onClick メソッド内で、Fragment をコンテナー レイアウトに追加します。

YourMapFragment f = new YourMapFragment();
getFragmentManager().beginTransaction().add(R.id.container_layout, f).commit();

この場合、「container_layout」を空のFrameLayoutにして、Activity のレイアウト ファイルでプレースホルダーとして使用することをお勧めします。ここにフラグメントが表示されます。

本当にタップを使用したい場合は、たとえばダブルタップを次のように認識できます。

  • ジェスチャーを認識する必要があるクラスが実装する必要があるインターフェースが必要になります
  • インターフェイスへのコールバックを使用してジェスチャを解釈するカスタム 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;
    }
}

アクティビティ内 (または Customview またはジェスチャを認識したい場所): (この場合、アクティビティをタップすると 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 に答える