私は Google Maps Android API v2 を使用しており、タップ (またはダブルタップ) で小さな地図 (= 私のビューでは SupportMapFragment) をフルスクリーンで開くことができるようにしたいと考えています。
これは技術的に可能ですか?はいの場合、それを達成する方法は?
前もって感謝します。
私は Google Maps Android API v2 を使用しており、タップ (またはダブルタップ) で小さな地図 (= 私のビューでは SupportMapFragment) をフルスクリーンで開くことができるようにしたいと考えています。
これは技術的に可能ですか?はいの場合、それを達成する方法は?
前もって感謝します。
はい、それは間違いなく可能です。
たとえば、ボタンを持つことができ、ボタンを押すと、アクティビティのレイアウト ファイル内のコンテナー レイアウトに MapFragment / SupportMapFragment が追加されます。
Button の onClick メソッド内で、Fragment をコンテナー レイアウトに追加します。
YourMapFragment f = new YourMapFragment();
getFragmentManager().beginTransaction().add(R.id.container_layout, f).commit();
この場合、「container_layout」を空のFrameLayoutにして、Activity のレイアウト ファイルでプレースホルダーとして使用することをお勧めします。ここにフラグメントが表示されます。
本当にタップを使用したい場合は、たとえばダブルタップを次のように認識できます。
インターフェース:
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(...) を返します。