마스터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일 답변
...