1

Google Maps Android API v2를 사용 중이며 탭 (또는 더블 탭)에서 작은지도 (= 내 SupportMapFragment)를 전체 화면으로 열 수 있기를 원합니다.더블 탭에서 전체 화면 SupportMapFragment 열기

기술적으로 가능합니까? 그렇다면 달성 방법은 무엇입니까?

미리 감사드립니다.

답변

0

확실히 가능합니다.

당신은 예를 들어 버튼을 가질 수 및 으로 MapFragment/SupportMapFragment이 액티비티의 레이아웃 파일 내부에 컨테이너 레이아웃에 추가됩니다 버튼을 눌러시. 당신이 컨테이너의 레이아웃에 조각을 추가하려면 단추의 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 (...)를 반환합니다.