Я пытаюсь использовать Google Maps в моем приложении для Android. Если я нажимаю на любую позицию на карте, я хочу, чтобы окно редактирования поиска отображало ее местоположение. - PullRequest
0 голосов
/ 20 февраля 2012

Я пытаюсь использовать карты Google в своем приложении для Android.Если я нажимаю на любую позицию на карте, я хочу, чтобы окно редактирования поиска отображало его местоположение, но каким-то образом оно не обновлялось.Я могу показать тост, но не текст в поле поиска. Пожалуйста, скажите мне, что я делаю неправильно.Любая помощь будет высоко оценена.Заранее спасибо.

Вот мой код публичного класса GooglemapsActivity расширяет MapActivity {

    EditText txtSearch;
     MapView mapView; 
     MapController mc;
     GeoPoint p;

 @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        //EditText name = (EditText) this.findViewById(R.id.travelNameText);
    //  name.setText(txtSearch.getText().toString());
    }

 class MapOverlay extends com.google.android.maps.Overlay
         {
         @Override
         public boolean draw(Canvas canvas, MapView mapView, 
         boolean shadow, long when) 
         {
             super.draw(canvas, mapView, shadow);                   

             //---translate the GeoPoint to screen pixels---
             Point screenPts = new Point();
             mapView.getProjection().toPixels(p, screenPts);

             //---add the marker---
             Bitmap bmp = BitmapFactory.decodeResource(
                 getResources(), R.drawable.icon);            
             canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);         
             return true;
         }

               @Override
                public boolean onTouchEvent(MotionEvent event, MapView mapView) 
                {   
                //---when user lifts his finger---
                  //---when user lifts his finger---
             if (event.getAction() == 1) {                
                 GeoPoint p = mapView.getProjection().fromPixels(
                     (int) event.getX(),
                     (int) event.getY());

                 Geocoder geoCoder = new Geocoder(
                     getBaseContext(), Locale.getDefault());
                 try {
                     List<Address> addresses = geoCoder.getFromLocation(
                         p.getLatitudeE6()  / 1E6, 
                         p.getLongitudeE6() / 1E6, 1);

                     String add = "";
                     if (addresses.size() > 0) 
                     {
                         for (int i=0; i<addresses.get(0).getMaxAddressLineIndex(); 
                              i++)
                            add += addresses.get(0).getAddressLine(i) + "\n";
                     }

                     Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();

                 }
                 catch (IOException e) {                
                     e.printStackTrace();
                 }   
                 return true;
             }
             else                
                 return false;
         }


       }
        /** Called when the activity is first created. */
    @Override
    protected boolean isRouteDisplayed() 
    {
    return false;
    }

    public void changeMap(String area)
    {

        mapView = (MapView) findViewById(R.id.mapview);
        MapController mc=mapView.getController();


        GeoPoint myLocation=null;

        double lat = 0;
        double lng = 0;
        try
        {

         Geocoder g = new Geocoder(this, Locale.getDefault()); 

           java.util.List<android.location.Address> result=g.getFromLocationName(area, 1); 
         if(result.size()>0){
            Toast.makeText(GooglemapsActivity.this, "country: " + 
                    String.valueOf(result.get(0).getCountryName()), Toast.LENGTH_SHORT).show();
              lat = result.get(0).getLatitude();
              lng = result.get(0).getLongitude();
              EditText name = (EditText) this.findViewById(R.id.txtMapSearch);
                name.setText("country: " + 
                     String.valueOf(result.get(0).getCountryName()).toString());

                        }             
            else{
            Toast.makeText(GooglemapsActivity.this, "record not found"
                     ,Toast.LENGTH_SHORT).show();
                return;
            }
        }
        catch(IOException io)
        {
            Toast.makeText(GooglemapsActivity.this, "Connection Error"
                 , Toast.LENGTH_SHORT).show();
        }
        myLocation = new GeoPoint(
            (int) (lat * 1E6), 
            (int) (lng * 1E6));

        //Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
        mc.animateTo(myLocation);
        mc.setZoom(10); 
       mapView.invalidate();
    }



    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);

        Button btnSearch=(Button) findViewById(R.id.btnSearch);
        //txtSearch=(EditText)findViewById(R.id.c);

        btnSearch.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {


    txtSearch=(EditText)findViewById(R.id.txtMapSearch);
    String area=txtSearch.getText().toString();
    GooglemapsActivity.this.changeMap(area);


            }
        });


        mapView = (MapView) findViewById(R.id.mapview);

        LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);  


        View zoomView = mapView.getZoomControls(); 

        zoomLayout.addView(zoomView, 
            new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, 
                LayoutParams.WRAP_CONTENT)); 
        mapView.displayZoomControls(true);
        mc = mapView.getController();
        String coordinates[] = {"1.352566007", "103.78921587"};
        double lat = Double.parseDouble(coordinates[0]);
        double lng = Double.parseDouble(coordinates[1]);

        p = new GeoPoint(
              (int) (lat * 1E6), 
              (int) (lng * 1E6));

          mc.animateTo(p);
          mc.setZoom(17); 
          mapView.invalidate();
          mc.animateTo(p);
          mc.setZoom(17); 
      //---Add a location marker---
              MapOverlay mapOverlay = new MapOverlay();
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(mapOverlay);        
        mapView.invalidate();


    }
}

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

У меня есть решение проблемы.В OnTouchEvent, где я создаю тост, мне нужно было установить текст в поле ввода в этой позиции.Спасибо за попытку, хотя.вот код:

открытый класс GooglemapsActivity расширяет MapActivity {

    EditText txtSearch;
    EditText TravelFrom;
     MapView mapView; 
     MapController mc;
     GeoPoint p;



class MapOverlay extends com.google.android.maps.Overlay
{
         @Override
         public boolean draw(Canvas canvas, MapView mapView, 
         boolean shadow, long when) 
         {
             super.draw(canvas, mapView, shadow);                   

             //---translate the GeoPoint to screen pixels---
             Point screenPts = new Point();
             mapView.getProjection().toPixels(p, screenPts);

             //---add the marker---
             Bitmap bmp = BitmapFactory.decodeResource(
                 getResources(), R.drawable.icon);            
             canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);         
             return true;
         }

     @Override
   public boolean onTouchEvent(MotionEvent event, MapView mapView) 
  {   
      //---when user lifts his finger---
         //---when user lifts his finger---
             if (event.getAction() == 1) {                
                 GeoPoint p = mapView.getProjection().fromPixels(
                     (int) event.getX(),
                     (int) event.getY());

                 Geocoder geoCoder = new Geocoder(
                     getBaseContext(), Locale.getDefault());
                 try {
                     List<Address> addresses = geoCoder.getFromLocation(
                         p.getLatitudeE6()  / 1E6, 
                         p.getLongitudeE6() / 1E6, 1);

                     String add = "";
                     if (addresses.size() > 0) 
                     {
                         for (int i=0; <addresses.get(0).getMaxAddressLineIndex(); 
                              i++)
                            add += addresses.get(0).getAddressLine(i) + "\n";
                     }
     txtSearch = (EditText) GooglemapsActivity.this.
          findViewById(R.id.txtMapSearch);
                    txtSearch.setText(add);

                 Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();

                 }
                 catch (IOException e) {                
                     e.printStackTrace();
                 }   
                 return true;
             }
             else                
                 return false;
         }


     }
    /** Called when the activity is first created. */
    @Override
    protected boolean isRouteDisplayed() 
    {
    return false;
    }

    public void changeMap(String area)
    {

        mapView = (MapView) findViewById(R.id.mapview);
        MapController mc=mapView.getController();


        GeoPoint myLocation=null;

        double lat = 0;
        double lng = 0;
        try
        {

         Geocoder g = new Geocoder(this, Locale.getDefault()); 

   java.util.List<android.location.Address> result=g.getFromLocationName(area, 1); 
            if(result.size()>0){
                Toast.makeText(GooglemapsActivity.this, "country: " + String.
               valueOf(result.get(0).getCountryName()), Toast.LENGTH_SHORT).show();
                lat = result.get(0).getLatitude();
                lng = result.get(0).getLongitude();
                //EditText name = (EditText) this.findViewById(R.id.txtMapSearch);
  txtSearch = (EditText)GooglemapsActivity.this.findViewById(R.id.txtMapSearch);
                txtSearch.setText("country: " + String.valueOf(result.get(0).
          getCountryName()).toString());

                        }             
  else{
 Toast.makeText(GooglemapsActivity.this,"record not 
       found", Toast.LENGTH_SHORT).show();
                return;
            }
        }
        catch(IOException io){
                                                                                          Toast.makeText(GooglemapsActivity.this,"ConnectionError",                           
    Toast.LENGTH_SHORT).show();
        }
        myLocation = new GeoPoint(
            (int) (lat * 1E6), 
            (int) (lng * 1E6));

       // Drawable drawable = this.getResources().getDrawable(R.drawable.bubble);
        mc.animateTo(myLocation);
        mc.setZoom(10); 
       mapView.invalidate();


    }



    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);

        Button btnSearch=(Button) findViewById(R.id.btnSearch);
        //txtSearch=(EditText)findViewById(R.id.c);

        btnSearch.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


    txtSearch=(EditText)findViewById(R.id.txtMapSearch);
     String area=txtSearch.getText().toString();

                GooglemapsActivity.this.changeMap(area);


            }
        });
        Button btnDone=(Button) findViewById(R.id.btnDone);
        //txtSearch=(EditText)findViewById(R.id.c);

        btnDone.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


    txtSearch=(EditText)findViewById(R.id.txtMapSearch);
    String area=txtSearch.getText().toString();

    //GooglemapsActivity.this.changeMap(area);
    TravelFrom=(EditText)findViewById(R.id.travelFromEntry);
                TravelFrom.setText(area);


            }
        });


        mapView = (MapView) findViewById(R.id.mapview);

        LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);  


        View zoomView = mapView.getZoomControls(); 

        zoomLayout.addView(zoomView, 
            new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, 
                LayoutParams.WRAP_CONTENT)); 
        mapView.displayZoomControls(true);
        mc = mapView.getController();
        String coordinates[] = {"1.352566007", "103.78921587"};
        double lat = Double.parseDouble(coordinates[0]);
        double lng = Double.parseDouble(coordinates[1]);

        p = new GeoPoint(
              (int) (lat * 1E6), 
              (int) (lng * 1E6));

          mc.animateTo(p);
          mc.setZoom(17); 
          mapView.invalidate();
          mc.animateTo(p);
          mc.setZoom(17); 
      //---Add a location marker---
       MapOverlay mapOverlay = new MapOverlay();
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(mapOverlay);        
        mapView.invalidate();


    }
}
0 голосов
/ 20 февраля 2012

использование:

EditText name = (EditText) GooglemapsActivity.this.findViewById(R.id.txtMapSearch);

вместо

EditText name = (EditText) this.findViewById(R.id.txtMapSearch);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...