覆盖中的onTap事件

时间:2012-10-14 17:33:39

标签: java android google-maps

任何可以帮助我使用此代码实现ontap()事件的人?         下面的代码将显示用户和条的当前位置         谷歌地图中的位置。该代码工作正常。但我的问题是我不知道如何         实现ontap()事件。是否可以实现onTap事件甚至是我的叠加层         是在oncreate bundle之外?

    import java.util.ArrayList;
    import java.util.List;
    import org.apache.http.NameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Point;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.widget.Button;
    import com.google.android.maps.GeoPoint;
    import com.google.android.maps.MapActivity;
    import com.google.android.maps.MapController;
    import com.google.android.maps.MapView;
    import com.google.android.maps.MyLocationOverlay;
    import com.google.android.maps.Overlay;
    import com.google.android.maps.OverlayItem;



    public class BarLocatorActivity extends MapActivity {
         Button map1,login1,menu1,power1;        
        // Creating JSON Parser object
        JSONNorman jNorman = new JSONNorman();


        private static String url_all_bar =
      "http://xxx.xxx.xxx.xxx/xampp/BARANDROID/get_all_bars.php";

        // JSON Node names
        private static final String TAG_SUCCESS = "success";
        private static final String TAG_BARS = "bars";
        private static final String TAG_BARLAT = "bar_lat";
        private static final String TAG_BARLONG = "bar_long";

        // bars JSONArray
        JSONArray bars = null;


        private MapController mapController;
        private MapView mapView;
        private LocationManager locationManager;
        private MyLocationOverlay myLocationOverlay;

        public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.map); // bind the layout to the activity

        // Configure the Map
        mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);
        // enable Street view by default
        mapView.setStreetView(true);

       // mapView.setSatellite(true);

        // enable to show Traffic on map
        // mapView.setTraffic(true);
        mapController = mapView.getController();
        mapController.setZoom(15); // Zoon 1 is world view
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
            0, new GeoUpdateHandler());

        myLocationOverlay = new MyLocationOverlay(this, mapView);
        mapView.getOverlays().add(myLocationOverlay);

        myLocationOverlay.runOnFirstFix(new Runnable() {
          public void run() {

            mapView.getController().animateTo(myLocationOverlay.getMyLocation());
          }
        });
        new LoadAllBars().execute();
      }

      /* Initiating Menu XML file (menu.xml) */
      @Override
      public boolean onCreateOptionsMenu(Menu menu)
      {
          MenuInflater menuInflater = getMenuInflater();
          menuInflater.inflate(R.layout.menu, menu);
          return true;
      }

      /**
       * Event Handling for Individual menu item selected
       * Identify single menu item by it's id
       * */
      @Override
      public boolean onOptionsItemSelected(MenuItem item)
      {

          switch (item.getItemId())
          {

          case R.id.view:
              BarLocatorActivity.this.finish();
              Intent intent1 = new Intent(getApplicationContext(), 
                   AllBarActivity.class);
              startActivity(intent1);
              android.os.Process.killProcess(android.os.Process.myPid());
                System.exit(0);
              return true;

          case R.id.map1:
              BarLocatorActivity.this.finish();
              Intent intent2 = new Intent(getApplicationContext(), BarLocatorActivity.class);
              startActivity(intent2);
              android.os.Process.killProcess(android.os.Process.myPid());
                System.exit(0);
              return true;

          case R.id.login:
              BarLocatorActivity.this.finish();
              Intent intent3 = new Intent(getApplicationContext(), 
                  SignInActivity.class);
                  startActivity(intent3);
                  android.os.Process.killProcess(android.os.Process.myPid());
                System.exit(0); 
                return true;

          case R.id.exit:                       
                        BarLocatorActivity.this.finish();   
                        // The following makes the Android Gods frown upon me
                        android.os.Process.killProcess(android.os.Process.myPid());
                        System.exit(0);         
              return true;
          default:
              return super.onOptionsItemSelected(item);
          }
      }

      @Override
      protected boolean isRouteDisplayed() {
        return false;
      }

      public class GeoUpdateHandler implements LocationListener {

        @Override
        public void onLocationChanged(Location location) {
          int lat = (int) (location.getLatitude() * 1E6);
          int lng = (int) (location.getLongitude() * 1E6);
          GeoPoint point = new GeoPoint(lat, lng);  
          mapController.animateTo(point); // mapController.setCenter(point);

        }

        @Override
        public void onProviderDisabled(String provider) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
      }



      @Override
      protected void onResume() {
        super.onResume();
        myLocationOverlay.enableMyLocation();
        myLocationOverlay.enableCompass();
      }

      @Override
      protected void onPause() {
        super.onPause();
        myLocationOverlay.disableMyLocation();
        myLocationOverlay.disableCompass();
      }



    //bar location
      class LoadAllBars extends AsyncTask<String, String, String> {
          protected String doInBackground(String... args) {

              List<NameValuePair> params = new ArrayList<NameValuePair>();
              JSONObject json = jNorman.makeHttpRequest(url_all_bar, "GET", params);

              Log.d("All bars: ", json.toString());

              try {
                  // Checking for SUCCESS TAG
                  int success = json.getInt(TAG_SUCCESS);

                  if (success == 1) {
                      bars = json.getJSONArray(TAG_BARS);                   

                      for (int i = 0; i < bars.length(); i++) {                     
                          JSONObject c = bars.getJSONObject(i);
                          String bar_lat = c.getString(TAG_BARLAT);  
                          String bar_long = c.getString(TAG_BARLONG);  
                          double latt = Double.parseDouble(bar_lat);
                          double lngg = Double.parseDouble(bar_long);

                        GeoPoint points = new GeoPoint((int) (latt * 1E6),(int) (lngg * 
                        1E6));
                        MapOverlay mapOverlay = new MapOverlay();
                    mapOverlay.setPointToDraw(points);
                    List<Overlay> listOfOverlays = mapView.getOverlays();           
                    listOfOverlays.add(mapOverlay);
                          }                     
                  }     

              } catch (JSONException e) {
                  e.printStackTrace();
              }

              return null;
          }  
      }

      //end bar location

      //overlay

      class MapOverlay extends Overlay {
        private GeoPoint pointToDraw;

        public void setPointToDraw(GeoPoint points) {
            pointToDraw = points;
        }

        public GeoPoint getPointToDraw() {
            return pointToDraw;
        }

          @Override
          public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
              super.draw(canvas, mapView, shadow);                   

              // convert point to pixels
              Point screenPts = new Point();
              mapView.getProjection().toPixels(pointToDraw, screenPts);
              // add marker
              Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.red);
              canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 24, null);          
              return true;
          }  
      } 

    } 

    thanks in advance:)

0 个答案:

没有答案