MapsActivity.java
package com.gun0912.googlemapcustommarker;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.google.android.gms.maps.CameraUpdate;
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.BitmapDescriptorFactory;
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 java.text.NumberFormat;
import java.util.ArrayList;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMarkerClickListener, GoogleMap.OnMapClickListener {
Marker selectedMarker;
View marker_root_view;
TextView tv_marker;
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.537523, 126.96558), 14));
mMap.setOnMarkerClickListener(this);
mMap.setOnMapClickListener(this);
setCustomMarkerView();
getSampleMarkerItems();
}
private void setCustomMarkerView() {
marker_root_view = LayoutInflater.from(this).inflate(R.layout.marker_layout, null);
tv_marker = (TextView) marker_root_view.findViewById(R.id.tv_marker);
}
private void getSampleMarkerItems() {
ArrayList<MarkerItem> sampleList = new ArrayList();
sampleList.add(new MarkerItem(37.538523, 126.96568, 2500000));
sampleList.add(new MarkerItem(37.527523, 126.96568, 100000));
sampleList.add(new MarkerItem(37.549523, 126.96568, 15000));
sampleList.add(new MarkerItem(37.538523, 126.95768, 5000));
for (MarkerItem markerItem : sampleList) {
addMarker(markerItem, false);
}
}
private Marker addMarker(MarkerItem markerItem, boolean isSelectedMarker) {
LatLng position = new LatLng(markerItem.getLat(), markerItem.getLon());
int price = markerItem.getPrice();
String formatted = NumberFormat.getCurrencyInstance().format((price));
tv_marker.setText(formatted);
if (isSelectedMarker) {
tv_marker.setBackgroundResource(R.drawable.ic_marker_phone_blue);
tv_marker.setTextColor(Color.WHITE);
} else {
tv_marker.setBackgroundResource(R.drawable.ic_marker_phone);
tv_marker.setTextColor(Color.BLACK);
}
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.title(Integer.toString(price));
markerOptions.position(position);
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(this, marker_root_view)));
return mMap.addMarker(markerOptions);
}
// View를 Bitmap으로 변환
private Bitmap createDrawableFromView(Context context, View view) {
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
view.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
return bitmap;
}
private Marker addMarker(Marker marker, boolean isSelectedMarker) {
double lat = marker.getPosition().latitude;
double lon = marker.getPosition().longitude;
int price = Integer.parseInt(marker.getTitle());
MarkerItem temp = new MarkerItem(lat, lon, price);
return addMarker(temp, isSelectedMarker);
}
@Override
public boolean onMarkerClick(Marker marker) {
CameraUpdate center = CameraUpdateFactory.newLatLng(marker.getPosition());
mMap.animateCamera(center);
changeSelectedMarker(marker);
return true;
}
private void changeSelectedMarker(Marker marker) {
// 선택했던 마커 되돌리기
if (selectedMarker != null) {
addMarker(selectedMarker, false);
selectedMarker.remove();
}
// 선택한 마커 표시
if (marker != null) {
selectedMarker = addMarker(marker, true);
marker.remove();
}
}
@Override
public void onMapClick(LatLng latLng) {
changeSelectedMarker(null);
}
}
MarkerItem.java
package com.gun0912.googlemapcustommarker;
/**
* Created by TedPark on 16. 4. 26..
*/
public class MarkerItem {
double lat;
double lon;
int price;
public MarkerItem(double lat, double lon, int price) {
this.lat = lat;
this.lon = lon;
this.price = price;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
public double getLon() {
return lon;
}
public void setLon(double lon) {
this.lon = lon;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}

안드로이드 구글맵 예제소스를 이용하여 앱을 만들고있는데
Map에 표시하는값 중 아래코드 마지막 값(지도에 직접보이는 값)을 문자열 형으로 변경하고싶은데 잘 되지가 않습니다.
sampleList.add(new MarkerItem(37.538523, 126.96568, 2500000));
기존 int로 값을 넣게 되어있는것을 문자열로 넣고싶은데
잘 되지가 않습니다..
위 사진과같이 나오는데 (Integer.toString(price)); 이부분을 어떻게 바꿔야할지 모르겠습니다..
또 혹시 다른문제인지..