마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

googleMap v2 관련 customMarker , customZoomController 문의

0 추천

GoogleMap v2 사용해서 맵 개발중입니다.

현재 저에게 필요한 부분은 marker에 이미지를 넣고 마커가 클릭상태에 있게끔 즉 말풍선이 보이게끔 설정하는 부분과

marker 를 custom해서 사용을 하는부분과 적용하는부분이 문제가 있구요

추가로 ZoomController 의 이미지를 변경 하는부분 입니다 .

frameLayout 으로 이미지 +,- 추가후 리스너를 달아서 하려고 하는대

gMap = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map_mapview)).getMap();

gMap 에서는 줌 컨트롤러 부분을 어디서 얻어와야 하는지 막막하네요 . 전혀 보이지도 않구요 .

 

gps 이미지도 변경 해야하는대 marker 처럼 icon을 설정하는부분이 있으나 제가 못찾는걸까요 아니면 일일히 동적으로 추가해서 작업을 진행해줘야 하는걸까요 . 도움부탁드립니다.

 

package com.ercompany.minggle.android.apt.activity.general;

import java.util.ArrayList;

import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.TextView;

import com.ercompany.minggle.android.apt.R;
import com.ercompany.minggle.android.apt.item.LocationItem;
import com.ercompany.minggle.android.apt.ui.NavigationBar;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.maps.MapController;

public class MapDialogActivity extends FragmentActivity implements android.location.LocationListener, View.OnClickListener{
	public static interface OnMapDialogListener{
		public void setTexts();
		public void setLocations();
	}
	private GoogleMap gMap;
	private LocationManager locationManager;
	private MapController mapController;
	
	private ArrayList<LocationItem> locations = new ArrayList<LocationItem>();
	private String bestProvider;
	private String navBar;
	private int zoomSize;
	
	private OnMapDialogListener listener;
	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.dialog_map);
		
		zoomSize = 14;
		
		Intent intent = getIntent();
		locations = intent.getParcelableArrayListExtra("locations");
		navBar = intent.getStringExtra("navbar");
		findViewById(R.id.btn_map_close).setOnClickListener(this);
		findViewById(R.id.zoom_plus).setOnClickListener(this);
		findViewById(R.id.zoom_minus).setOnClickListener(this);
		
		((NavigationBar)findViewById(R.id.map_title)).setTitle(navBar);
		((TextView)findViewById(R.id.txt_title)).setText(locations.get(0).getTitle());
		((TextView)findViewById(R.id.txt_info_top)).setText(locations.get(0).getaddressTop());
		((TextView)findViewById(R.id.txt_info_middle)).setText(locations.get(0).getaddressMiddel());
		((TextView)findViewById(R.id.txt_info_bottom)).setText(locations.get(0).getaddressBottom());
		
		GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);		
		locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
		bestProvider = locationManager.getBestProvider(new Criteria(), true);
		
		if(bestProvider != null){
			locationManager.requestLocationUpdates(bestProvider, 0, 0, this);
			setUpMapIfNeeded();
		}
		
	}
	private void setUpMapIfNeeded(){
		if(gMap == null){
			gMap = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map_mapview)).getMap();
			for(LocationItem loc: locations) {
				CameraPosition cp = new CameraPosition.Builder().target(loc.getLatLng()).zoom(zoomSize).build();
				MarkerOptions marker = new MarkerOptions().position(loc.getLatLng()).title(loc.getTitle()).snippet(loc.getaddressTop())
						.icon(BitmapDescriptorFactory.fromResource(R.drawable.img_ico_marker)).visible(true);
				gMap.moveCamera(CameraUpdateFactory.newCameraPosition(cp));
				gMap.addMarker(marker);
			}
		} if(gMap != null) {
			setUpMap();
		}
	}
	private void setUpMap(){
		gMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
		gMap.setMyLocationEnabled(true);
		gMap.getMyLocation();
		gMap.getUiSettings().setCompassEnabled(false); // 확대시 나침반 X
		gMap.getUiSettings().setZoomControlsEnabled(false); // + - 버튼 X
		gMap.getUiSettings().setRotateGesturesEnabled(false); // 화면 360도 회전 X
	}
	
	@Override
	protected void onResume() {
		super.onResume();
		setUpMapIfNeeded();
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		locationManager.removeUpdates(this);
	}
	
	@Override
	public void onClick(View v) {
		if(v.getId() == R.id.btn_map_close){
			finish();
		} else if(v.getId() == R.id.zoom_plus){
			onZoomControl(true);
		} else if(v.getId() == R.id.zoom_minus){
			onZoomControl(false);
		}
	}
	
	private void onZoomControl(boolean isZoom){
		if(zoomSize < 22 || zoomSize > 18){
			if(isZoom){
				zoomSize++;
				
				mapController.setZoom(zoomSize);
			} else {
				zoomSize--;
				mapController.setZoom(zoomSize);
			}
		} else return;
	}

	@Override
	public void onProviderDisabled(String provider) {
		
	}
	@Override
	public void onProviderEnabled(String provider) {
		
	}
	@Override
	public void onStatusChanged(String provider, int status, Bundle extras) {
		
	}
	@Override
	public void onLocationChanged(Location location) {
		
	}
	
	public void setMapDialogListener(OnMapDialogListener listener){
		this.listener = listener;
	}
	

}

 

구기웅 (1,110 포인트) 님이 2013년 9월 23일 질문

1개의 답변

0 추천

자답입니다 .

완벽 하진 안지만 줌부분은 해결 했네요 . 좀더 다듬을 필요가 있을거 같습니다.

@Override
public void onClick(View v) {
if(v.getId() == R.id.btn_map_close){
finish();
} else if(v.getId() == R.id.zoom_plus){
onZoomControl(true);
} else if(v.getId() == R.id.zoom_minus){
onZoomControl(false);
}
}
 
// zoomLevel 변경로직 
private void onZoomControl(boolean isZoom){
if(isZoom){
zoomSize+=0.5;
gMap.moveCamera(CameraUpdateFactory.zoomTo(zoomSize));
 
} else {
zoomSize-=0.5;
gMap.moveCamera(CameraUpdateFactory.zoomTo(zoomSize));
 
}

구기웅 (1,110 포인트) 님이 2013년 9월 23일 답변
...