0

こんにちは。1 つのマーカーのスニペットをいくつか追加することはできますか? Google マップの Android バージョン 2 の場合

 Marker melbourne = mMap.addMarker(new MarkerOptions()
                          .position(MELBOURNE)
                          .title("Melbourne")
                          .snippet("Population: 4,137,400"));

これが私の情報ウィンドウです

class MyInfoWindowAdapter implements InfoWindowAdapter{

           private final View myContentsView;

               MyInfoWindowAdapter(){
               LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((w*2)/3, LayoutParams.WRAP_CONTENT);

               myContentsView = getLayoutInflater().inflate(R.layout.custom_info_contents, null);
               myContentsView.setLayoutParams(lp);
               }

       public View getInfoContents(Marker marker) {

               tvTitle = ((TextView)myContentsView.findViewById(R.id.title));
               tvTitle.setText(marker.getTitle());
               tvSnippet = ((TextView)myContentsView.findViewById(R.id.snippet));
               tvSnippet.setText(marker.getSnippet());

           return myContentsView;
       }

       public View getInfoWindow(Marker marker) {
              // TODO Auto-generated method stub
              return null;
       }

   }

必要に応じて、さまざまなスニペットのさまざまなマーカーを表示したいと考えています。どうすればいいですか?そして、それはまったく可能ですか?

更新: おそらく理解していないか、間違って説明しました。

public void ParseQueryMap() {
          ParseQuery query = new ParseQuery("MyObject");
          query.findInBackground(new FindCallback() {
          public void done(List<ParseObject> myObject, ParseException e) {
          if (e == null) {

                    for ( int i = 0; i < myObject.size(); i++) {

                          commGet =  myObject.get(i).getString("Comment");
                          bugGet = myObject.get(i).getObjectId();   

                          geo1Dub = myObject.get(i).getParseGeoPoint("location").getLatitude();
                          geo2Dub = myObject.get(i).getParseGeoPoint("location").getLongitude();

                         Location aLocation = new Location("first");
                         aLocation.setLatitude(geo1Dub);
                         aLocation.setLongitude(geo2Dub);
                         Location bLocation = new Location("second");
                         bLocation.setLatitude(location.getLatitude());
                         bLocation.setLongitude(location.getLongitude());
                         int distance = (int)aLocation.distanceTo(bLocation);

                              if (distance<rad) {
                                  myMap.addMarker(new MarkerOptions().position(new LatLng(geo1Dub,geo2Dub)).title(commGet).snippet(snippet)
                                      .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));     

                               } else {

                               }                                                      

                         }

             } else {
                    Toast.makeText(MainActivity.this, "Error!", Toast.LENGTH_SHORT).show();
              }
          }
      });

マーカーごとにbugGetを取得したいのですが、ユーザーのbugGetは表示されませんが、彼女が情報ウィンドウをクリックすると、bugGet固有のマーカーを知ることができました。データベース内の各マーカーを「bugGet」して「id」します。ユーザーはそれを必要としませんが、私はあなたが必要です。

4

2 に答える 2

0

私のプロジェクトの 1 つで、新しいクラスを作成し、MarkerSnippetこのクラスにすべての情報を追加しました。

public class MarkerSnippet {
  private String foo;
  private String bar;
  public MarkerSnippet(String foo, String bar) {
    this.foo = foo;
    this.bar = bar;
  }
  // getter and setter for foo and bar
}

次に、各マーカーのインスタンスを作成し、MarkerSnippetGSON を使用して JSON 文字列として追加します (スニペットは文字列のみを受け入れるため)。

Gson gson = new Gson(); // remark: only one Gson instane is needed
String fooContent = "myFoo";
String barContent = "myBar";

String snippetString = gson.toJson(new MarkerSnippet(fooContent, barContent));
map.addMarker(
  new MarkerOptions().position(position)
    .title(title)
    .snippet(snippetString)
);

次に、InfoWindowAdapter で、JSON 文字列を に変換MarkerSnippetし、表示するビューにスニペットのこの部分のみを追加する必要があります。

于 2013-03-18T11:58:23.373 に答える
0

これが例です。マーカーの座標を確認してから、何infoWindowを表示するかを決定できます。

 map.setInfoWindowAdapter(new InfoWindowAdapter() {

            // Use default InfoWindow frame
            @Override
            public View getInfoWindow(Marker args) {
                return null;
            }

            // Defines the contents of the InfoWindow
            @Override
            public View getInfoContents(Marker args) {

                // Getting view from the layout file info_window_layout
                View v = getLayoutInflater().inflate(R.layout.info_window_layout, null);

                // Getting the position from the marker
                clickMarkerLatLng = args.getPosition();

                TextView title = (TextView) v.findViewById(R.id.tvTitle);
                title.setText(args.getTitle());

                map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {          
                    public void onInfoWindowClick(Marker marker) 
                    {
                        if (SGTasksListAppObj.getInstance().currentUserLocation!=null)
                        {   
                            if (String.valueOf(SGTasksListAppObj.getInstance().currentUserLocation.getLatitude()).substring(0, 8).contains(String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)) &&
                                    String.valueOf(SGTasksListAppObj.getInstance().currentUserLocation.getLongitude()).substring(0, 8).contains(String.valueOf(clickMarkerLatLng.longitude).substring(0, 8)))
                            {
                                Toast.makeText(getApplicationContext(), "This your current location, navigation is not needed.",  Toast.LENGTH_SHORT).show();
                            }
                            else
                            {
                                FlurryAgent.onEvent("Start navigation window was clicked from daily map");
                                tasksRepository = SGTasksListAppObj.getInstance().tasksRepository.getTasksRepository();
                                for (Task tmptask : tasksRepository)
                                {
                                    String tempTaskLat = String.valueOf(tmptask.getLatitude());
                                    String tempTaskLng = String.valueOf(tmptask.getLongtitude());

                                    Log.d(TAG, String.valueOf(tmptask.getLatitude())+","+String.valueOf(clickMarkerLatLng.latitude).substring(0, 8));

                                    if (tempTaskLat.contains(String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)) && tempTaskLng.contains(String.valueOf(clickMarkerLatLng.longitude).substring(0, 8)))
                                    {  
                                        task = tmptask;
                                        break;
                                    }
                                }

                                Intent intent = new Intent(getApplicationContext() ,RoadDirectionsActivity.class);
                                intent.putExtra(TasksListActivity.KEY_ID, task.getId());
                                startActivity(intent);

                            }
                        }
                        else
                        {
                            Toast.makeText(getApplicationContext(), "Your current location could not be found,\nNavigation is not possible.",  Toast.LENGTH_SHORT).show();
                        }
                    }
                });

                // Returning the view containing InfoWindow contents
                return v;

            }
        });  
于 2013-03-18T10:48:47.367 に答える