안드로이드 개발 질문/답변
(글 수 45,052)
public class Location extends MapActivity {
GeoPoint point;
MapView mapView;
MapView mapView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.location);
super.onCreate(savedInstanceState);
setContentView(R.layout.location);
mapView = (MapView)findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(false);
mapView.setStreetView(true);
mapView.setSatellite(false);
mapView.setStreetView(true);
MapController mc = mapView.getController();
//mc.setCenter(point); // 시작 위치
mc.setZoom(8);
//mc.setCenter(point); // 시작 위치
mc.setZoom(8);
BackThread t = new BackThread();
Thread thread = new Thread(t);
thread.start();
}
Thread thread = new Thread(t);
thread.start();
}
class BackThread implements Runnable {
public void run() {
public void run() {
double d_latitude;
double d_longitude;
double d_longitude;
final List<Overlay> list = mapView.getOverlays();
Drawable drawable = getResources().getDrawable(R.drawable.androidmarker);
final HelloItemizedOverlay itemizedOverlay = new HelloItemizedOverlay(drawable,getApplication());
Drawable drawable = getResources().getDrawable(R.drawable.androidmarker);
final HelloItemizedOverlay itemizedOverlay = new HelloItemizedOverlay(drawable,getApplication());
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
XmlPullParser parser = factory.newPullParser();
parser.setInput(text.openStream(), "UTF-8");
while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
switch(parser.getEventType()){
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.END_DOCUMENT:
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.START_TAG:
if(parser.getName().equals("pension")){
switch(parser.getEventType()){
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.END_DOCUMENT:
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.START_TAG:
if(parser.getName().equals("pension")){
d_longitude = Double.parseDouble(parser.getAttributeValue(8));
d_latitude = Double.parseDouble(parser.getAttributeValue(9));
d_latitude = Double.parseDouble(parser.getAttributeValue(9));
point = new GeoPoint((int)(d_latitude*1E6), (int)(d_longitude*1E6));
OverlayItem overItem = new OverlayItem(point, "", "");
itemizedOverlay.addOverlayItem(overItem);
list.add(itemizedOverlay);
list.add(itemizedOverlay);
}
break;
}
parser.next();
}
}catch(Throwable t) {
Toast.makeText(Location.this, "실패: " + t.toString(), Toast.LENGTH_LONG).show();
}
}
}
break;
}
parser.next();
}
}catch(Throwable t) {
Toast.makeText(Location.this, "실패: " + t.toString(), Toast.LENGTH_LONG).show();
}
}
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
url주소에서 xml로 작성된 데이터를 파싱해서 가져옵니다.
좌표값이 약 200개정도 있는데 일단 저렇게 하면
맵위에 마커가 다 표시되긴 합니다.
근데 움직이는게 너~~~~무 느려요 ㅠㅠ
다른 비슷한 어플보면 움직이는 건 빠르던데..
빨리 할수 없을까요?
2011.07.06 19:24:56
itemizedOverlay.addOverlayItem(overItem);
list.add(itemizedOverlay);
지금은 아래와 같은 상황인데,
1. itemizedOverlay에 overlayItem을 추가
2. list에 itemizedOverlay를 추가
3. 위 순서를 200번 반복
를 이렇게 바꾸어보세요.
1. itemizedOverlay에 overlayItem 200개를 추가.
2. list에 itemizedOverlay를 한번만 추가.
이런 식으로 list.add() 부분을 try, catch 문 뒤쪽에 추가시켜보세요.



