Google Maps API v2 : 마커를 클릭 할 수있게 만드는 방법
Android Google Maps API v2의 마커를 클릭 할 수있게 만들면 옵션이있는 메뉴가 표시되거나 새로운 활동이 시작됩니까? 현재 앱에서 마커를 "최신"방식으로 만들었습니다. 필요한 나머지 코드와 연결할 수 있도록 이름이나 방법을 할당하지 않았습니다.
googleMap.addMarker(new MarkerOptions()
.position(latLng)
.title("My Spot")
.snippet("This is my spot!")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
이 질문에 답하면, 고유 한 이름으로 소개 된 다음 클릭 할 수 있도록 새 활동을 열도록 설정된 마커의 샘플 코드를 포함하십시오.
Google Android Maps Api v2의 모든 마커를 클릭 할 수 있습니다. 마커에 추가 속성을 설정할 필요는 없습니다. 해야 할 일은 마커 클릭 콜백을 googleMap에 등록하고 콜백 내에서 클릭을 처리하는 것입니다.
public class MarkerDemoActivity extends android.support.v4.app.FragmentActivity
implements OnMarkerClickListener
{
private Marker myMarker;
private void setUpMap()
{
.......
googleMap.setOnMarkerClickListener(this);
myMarker = googleMap.addMarker(new MarkerOptions()
.position(latLng)
.title("My Spot")
.snippet("This is my spot!")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
......
}
@Override
public boolean onMarkerClick(final Marker marker) {
if (marker.equals(myMarker))
{
//handle click here
}
}
}
다음은 마커 맞춤 설정에 대한 Google의 유용한 가이드입니다.
setTag(position) 지도에 마커를 추가하는 동안
Marker marker = map.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude)));
marker.setTag(position);
getTag()에 setOnMarkerClickListener리스너
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
int position = (int)(marker.getTag());
//Using position get Value from arraylist
return false;
}
});
액티비티 구현 OnMarkerClickListener를 사용하지 말고 로컬 OnMarkerClickListener를 사용하십시오.
// Not a good idea
class MapActivity extends Activity implements OnMarkerClickListener {
}
마커에 연결된 원본 데이터 모델을 조회하려면지도가 필요합니다
private Map<Marker, Map<String, Object>> markers = new HashMap<>();
데이터 모델이 필요합니다
private Map<String, Object> dataModel = new HashMap<>();
데이터 모델에 일부 데이터를 넣습니다.
dataModel.put("title", "My Spot");
dataModel.put("snipet", "This is my spot!");
dataModel.put("latitude", 20.0f);
dataModel.put("longitude", 100.0f);
데이터 모델을 사용하여 새 마커를 만들 때 제조업체 맵에 둘 다 추가
Marker marker = googleMap.addMarker(markerOptions);
markers.put(marker, dataModel);
클릭 마커 이벤트의 경우 로컬 OnMarkerClickListener를 사용하십시오.
@Override
public void onMapReady(GoogleMap googleMap) {
// grab for laters
this.googleMap = googleMap;
googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Map dataModel = (Map)markers.get(marker);
String title = (String)dataModel.get("title");
markerOnClick(title);
return false;
}
});
mapView.onResume();
showMarkers();
ZoomAsync zoomAsync = new ZoomAsync();
zoomAsync.execute();
}
정보 창을 표시하려면 마커 맵에서 원래 데이터 모델을 검색하십시오.
@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap;
googleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Map dataModel = (Map)markers.get(marker);
String title = (String)dataModel.get("title");
infoWindowOnClick(title);
}
});
다음은 클릭 가능한 마커가 4 개인지도 활동의 전체 코드입니다. 마커를 클릭하면 정보 창이 표시되고 정보 창을 클릭하면 영어, 독일어, 스페인어 또는 이탈리아어와 같은 다른 활동으로 이동합니다. OnInfoWindowClickListener에도 불구하고 OnMarkerClickListener를 사용하려면이 줄을 바꾸면됩니다.
mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener()
이에:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
이 줄 :
public void onInfoWindowClick(Marker arg0)
이에:
public boolean onMarkerClick(Marker arg0)
and at the end of the method "onMarkerClick":
return true;
I think it may be helpful for someone ;)
package pl.pollub.translator;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
Toast.makeText(this, "Choose a language.", Toast.LENGTH_LONG).show();
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener()
{
@Override
public void onInfoWindowClick(Marker arg0) {
if(arg0 != null && arg0.getTitle().equals("English")){
Intent intent1 = new Intent(MapsActivity.this, English.class);
startActivity(intent1);}
if(arg0 != null && arg0.getTitle().equals("German")){
Intent intent2 = new Intent(MapsActivity.this, German.class);
startActivity(intent2);}
if(arg0 != null && arg0.getTitle().equals("Italian")){
Intent intent3 = new Intent(MapsActivity.this, Italian.class);
startActivity(intent3);}
if(arg0 != null && arg0.getTitle().equals("Spanish")){
Intent intent4 = new Intent(MapsActivity.this, Spanish.class);
startActivity(intent4);}
}
});
LatLng greatBritain = new LatLng(51.30, -0.07);
LatLng germany = new LatLng(52.3107, 13.2430);
LatLng italy = new LatLng(41.53, 12.29);
LatLng spain = new LatLng(40.25, -3.41);
mMap.addMarker(new MarkerOptions()
.position(greatBritain)
.title("English")
.snippet("Click on me:)"));
mMap.addMarker(new MarkerOptions()
.position(germany)
.title("German")
.snippet("Click on me:)"));
mMap.addMarker(new MarkerOptions()
.position(italy)
.title("Italian")
.snippet("Click on me:)"));
mMap.addMarker(new MarkerOptions()
.position(spain)
.title("Spanish")
.snippet("Click on me:)"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(greatBritain));
mMap.moveCamera(CameraUpdateFactory.newLatLng(germany));
mMap.moveCamera(CameraUpdateFactory.newLatLng(italy));
mMap.moveCamera(CameraUpdateFactory.newLatLng(spain));
}
}
Another Solution : you get the marker by its title
public class MarkerDemoActivity extends android.support.v4.app.FragmentActivity implements OnMarkerClickListener
{
private Marker myMarker;
private void setUpMap()
{
.......
googleMap.setOnMarkerClickListener(this);
myMarker = googleMap.addMarker(new MarkerOptions()
.position(latLng)
.title("My Spot")
.snippet("This is my spot!")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
......
}
@Override
public boolean onMarkerClick(final Marker marker)
{
String name= marker.getTitle();
if (name.equalsIgnoreCase("My Spot"))
{
//write your code here
}
}
}
Step 1
public class TopAttractions extends Fragment implements OnMapReadyCallback,
GoogleMap.OnMarkerClickListener
Step 2
gMap.setOnMarkerClickListener(this);
Step 3
@Override
public boolean onMarkerClick(Marker marker) {
if(marker.getTitle().equals("sharm el-shek"))
Toast.makeText(getActivity().getApplicationContext(), "Hamdy", Toast.LENGTH_SHORT).show();
return false;
}
I have edited the given above example...
public class YourActivity extends implements OnMarkerClickListener
{
......
private void setMarker()
{
.......
googleMap.setOnMarkerClickListener(this);
myMarker = googleMap.addMarker(new MarkerOptions()
.position(latLng)
.title("My Spot")
.snippet("This is my spot!")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
......
}
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(this,marker.getTitle(),Toast.LENGTH_LONG).show();
}
}
참고URL : https://stackoverflow.com/questions/14226453/google-maps-api-v2-how-to-make-markers-clickable
'Programing' 카테고리의 다른 글
| PostgreSQL에 대한 장고 연결 :“피어 인증 실패” (0) | 2020.07.23 |
|---|---|
| 메서드를 찾을 수 없습니다 : '!! 0 [] System.Array.Empty ()' (0) | 2020.07.23 |
| 내부 목록 이해를 열거하는 파이썬 (0) | 2020.07.23 |
| JavaScript를 사용하여 RSS 피드를 구문 분석하는 방법은 무엇입니까? (0) | 2020.07.23 |
| Logcat이 내 로그 호출을 표시하지 않습니다 (0) | 2020.07.23 |