1

Я использую API Android Google Maps v2, и я хочу иметь возможность открывать в качестве полноэкранного просмотра небольшую карту (= SupportMapFragment на мой взгляд) при нажатии (или двойном нажатии).Открыть полноэкранный режим SupportMapFragment on Double-Tap

Это технически возможно? Если да, то как его достичь?

Заранее спасибо.

ответ

0

Да, это определенно возможно.

Вы могли бы, например, иметь кнопку, и при нажатии кнопки MapFragment/SupportMapFragment будет добавлен к контейнера макета внутри файла макета Activity в.

Внутри метода OnClick вашей кнопки вы добавляете фрагмент в контейнере макет:

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

В этом случае я бы рекомендовал «container_layout» является пустым FrameLayout, используются в качестве заполнителя в файл макета вашей деятельности. Здесь появится фрагмент.

Если вы действительно хотите использовать Отводы, это то, как вы можете узнать, например, двойного нажатия:

  • Вам понадобится интерфейс, класс, который необходимо признать жеста должен реализовать
  • Вам нужен обычай 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); 
    } 

TouchManager:

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

Смежные вопросы