如何为不同的标记创建不同的信息窗口?

时间:2014-05-15 22:21:04

标签: java android google-maps

我目前正在使用Google Maps API v2开发适用于Android的应用。即使我在大学学习(而且我还在学习)Java,我对android开发也很陌生。

我设法创建地图,并添加我的个人标记。每个标记都需要自己的信息窗口,这就是问题所在。我只能修改标题和片段,但在框中我需要为不同的标记放置不同的图片。

标记代表图书馆。

实施例: 标记1: 名称 服务(空调,食品,插头等的不同图像) 可用座位数

姓名不是问题:它的标题。座位也由代码表示。但图像是问题:我找不到在不同窗口中显示不同图像的方法。

以下是主要活动的Java代码:

package com.matteocunsolo.apposto;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.InfoWindowAdapter;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends FragmentActivity {

     class MyInfoWindowAdapter implements InfoWindowAdapter{

            private final View myContentsView;

            MyInfoWindowAdapter(){
                myContentsView = getLayoutInflater().inflate(R.layout.custom_info_contents, null);
            }

            @Override
            public View getInfoContents(Marker marker) {

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

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

     }

    // Google Map
    private GoogleMap googleMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            // Loading map
            initializeMap();

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

    }

    /**
     * function to load map. If map is not created it will create it for you
     * */
    private void initializeMap() {

        if (googleMap == null) {
            googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
            googleMap.getUiSettings().setZoomGesturesEnabled(true);
            if(googleMap != null) {
                googleMap.setMyLocationEnabled(true);
                googleMap.getUiSettings().setMyLocationButtonEnabled(true);
            }
            googleMap.getUiSettings().setRotateGesturesEnabled(true);
            CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(41.903021, 12.514744)).zoom(15).build();

            googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

            createMarkers();

            googleMap.setInfoWindowAdapter(new MyInfoWindowAdapter());
            // check if map is created successfully or not
            if (googleMap == null) {
                Toast.makeText(getApplicationContext(),
                        "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }





    void createMarkers() {


        String name = "Biblioteca Alessandrina";
        double latitude = 41.903021;
        double longitude = 12.514744;
        Marker m = googleMap.addMarker(new MarkerOptions().title(name).position(new LatLng(latitude, longitude)).snippet("250"));

        String name2 = "Biblioteca CIAO";
        double latitude2 = 41.906332;
        double longitude2 = 12.517669;
        Marker m2 = googleMap.addMarker(new MarkerOptions().title(name2 + "\n").position(new LatLng(latitude2, longitude2)).snippet("134"));
    }


    @Override
    protected void onResume() {
        super.onResume();
        initializeMap();
    }

}

这是信息窗口的XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

       <TextView
           android:id="@+id/title"
           android:layout_width="wrap_content"
           android:layout_height="30dp"
           android:layout_marginLeft="5dp"
           android:text="title"
           android:textSize="25dp"
           android:textStyle="bold" />

       <LinearLayout
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:orientation="horizontal" >

           <TextView
               android:layout_width="wrap_content"
               android:layout_height="23dp"
               android:layout_marginLeft="5dp"
               android:text="Services:   "
               android:textSize="20dp" />

           <ImageView
               android:layout_width="20dp"
               android:layout_height="20dp"
               android:layout_marginRight="5dp"
               android:layout_marginTop="3dp"
               android:adjustViewBounds="true"
               android:src="@drawable/ic_launcher" />

           <ImageView
               android:layout_width="20dp"
               android:layout_height="20dp"
               android:layout_marginRight="5dp"
               android:layout_marginTop="3dp"
               android:adjustViewBounds="true"
               android:src="@drawable/ic_launcher" />

           <ImageView
               android:layout_width="20dp"
               android:layout_height="20dp"
               android:layout_marginRight="5dp"
               android:layout_marginTop="3dp"
               android:adjustViewBounds="true"
               android:src="@drawable/ic_launcher" />
       </LinearLayout>

       <LinearLayout
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:orientation="horizontal" >

           <TextView
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginLeft="5dp"
               android:text="Seats:   "
               android:textSize="20dp" />
           <TextView
               android:id="@+id/snippet"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginLeft="5dp"
               android:textSize="20dp"
               android:text="150" />
       </LinearLayout>
    </LinearLayout>
</LinearLayout>

1 个答案:

答案 0 :(得分:0)

  

我只能修改标题和片段,但在框中我还需要为不同的标记添加不同的图片。

您的getInfoContents()方法肯定会发生更多变化。

  

但图像是问题:我无法找到在不同窗口中显示不同图像的方法

使用ImageView检索findViewById(),并在getInfoContents()方法中设置要用于该图像的图像。这与您更改TextView小部件的方式没有什么不同。

相关问题