0

ボタンをクリックするとGoogleマップを起動したいのですが、ユーザーが場所を選択すると、ユーザーの住所名とユーザーが選択した経度と緯度が取得されます。

こことグーグルでたくさん検索しましたが、答えが見つかりませんでした。

私はこのようなものが欲しい:

Button getLocation= (Button) footer.findViewById(R.id.getLocation);
getLocation.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        //start google maps and let the user choose a place, then return to this
        //activity and get the latitude and longitude and the name of place
        //that was chosen
    }
});

これは私が使用するマップフラグメントです:

 <fragment
            android:id="@+id/map"
            class="com.google.android.gms.maps.MapFragment"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginRight="150dp" />
4

1 に答える 1

0

coords[]グローバルdouble配列変数です。

基本的には、アクティビティ内のマップ フラグメント内にマップを表示するという考え方です。

マーカーにリスナーを設定したので、ユーザーがマーカーを移動すると、 によってトリガーされて処理されますhandler

R.id.mapこのチュートリアルに従ってセットアップした場合のフラグメント レイアウトです。

    public class Activity extends FragmentActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            this.setContentView(R.layout.activity_layout);

                .......

            //Set up map view
            map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

            mHandler = new LocationHandler(this); 
                .......

        OnMarkerDragListener markerDragListener = new OnMarkerDragListener() {

                @Override
                public void onMarkerDragStart(Marker marker) {
                    // Called when the marker drag is started

                }

                @Override
                public void onMarkerDragEnd(Marker marker) {
                    // Called when the marker is dropped down.
                    coords[0] = marker.getPosition().latitude;
                    coords[1] = marker.getPosition().longitude;
                    RestoreUIwithSavedLocation(coords);
                    Log.d(TAG, "Pin Dropped at: " + coords[0] + ", " + coords[1]);
                }

                @Override
                public void onMarkerDrag(Marker marker) {

                }
            };

            map.setOnMarkerDragListener(markerDragListener);
        }
    }

    private void RestoreUIwithSavedLocation(double[] coordsArray) {
        Message.obtain(mHandler, LOAD_COORD, coordsArray).sendToTarget();
    }

    // Write a inner class
    static class LocationHandler extends Handler {
        WeakReference<Activity> mActivity;

        public LocationHandler(Activity activity) {
            mActivity = new WeakReference<Activity>(activity);
        }

        public void handleMessage(Message msg) {
            Activity contextActivity = mActivity.get();
            switch ((int)msg.what) {

            case LOAD_COORD:
                map.clear();
                double[] coordArray = (double[])msg.obj;
                Marker marker = map.addMarker(new MarkerOptions().position(new LatLng(coordArray[0], coordArray[1])));
                map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(coordArray[0], coordArray[1]), 18));
                map.animateCamera(CameraUpdateFactory.zoomTo(18), 2000, null);
                marker.setDraggable(true);
                String s = Double.toString(coordArray[0]) + ", " + Double.toString(coordArray[1]);              
                contextActivity.text_location.setText(s);
                break;

            }
        }
    }
}

Google Map API のその他のパラメーターについては、次を参照してください: Google Maps Android API v2 - GoogleMap.OnMarkerDragListener

于 2013-03-28T12:36:21.663 に答える