안드로이드 개발 질문/답변
(글 수 45,052)
public class LOCATION_ITEM_DRAW extends ItemizedOverlay<OverlayItem>{ private ArrayList<OverlayItem> LIST_INFO = new ArrayList<OverlayItem>(); Drawable maker; int[] bitmap_id = {R.drawable.e1,R.drawable.e2,R.drawable.e3,R.drawable.e4,R.drawable.e5,R.drawable.e6,R.drawable.e7,R.drawable.e8,R.drawable.e9,R.drawable.e10,R.drawable.e11}; Drawable e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11; Drawable earr[] = {e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11}; /** 줌 레벨 저장용 */ int zoomlevel = 0 ; OverlayItem OVI ; public LOCATION_ITEM_DRAW(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); this.maker = defaultMarker; resetdraw(); } private void resetdraw(){ Drawable makerset = null; zoomlevel = mapView.getZoomLevel(); Log.w("-->","zoomlevel = "+zoomlevel); // 아이콘 크기 설정 Bitmap bitmap_temp; for(int i =0 ; i < bitmap_id.length; i++){ bitmap_temp = BitmapFactory.decodeResource(mcontext.getResources(), bitmap_id[i]); bitmap_temp = Bitmap.createScaledBitmap(bitmap_temp, (zoomlevel*3)+10, (zoomlevel*3)+10, true); earr[i] = new BitmapDrawable(bitmap_temp); } /*Drawable aa = new BitmapDrawable*/ LIST_INFO.clear(); int LIST_SIZE = LIST_INFO_TABLE.size(); GeoPoint TEMP_GEO = null; int cateint = 0; if(LIST_SIZE !=0 ){ for(int i = 0 ; i< LIST_SIZE ; i++){ TEMP_GEO = new GeoPoint((int) (LIST_INFO_TABLE.get(i).INFO_XPOS * 1E6), (int) (LIST_INFO_TABLE.get(i).INFO_YPOS * 1E6)); cateint = LIST_INFO_TABLE.get(i).INFO_CATEGORY; OVI = new OverlayItem(TEMP_GEO, LIST_INFO_TABLE.get(i).INFO_NAME, LIST_INFO_TABLE.get(i).INFO_NAME); switch (cateint) { case 1: makerset = earr[1]; break; case 2: makerset = earr[2]; break; case 3: makerset = earr[3]; break; case 4: makerset = earr[4]; break; case 5: makerset = earr[5]; break; case 6: makerset = earr[6]; break; case 7: makerset = earr[7]; break; case 8: makerset = earr[8]; break; case 9: makerset = earr[9]; break; case 10: makerset = earr[10]; break; case 11: makerset = earr[11]; break; default: makerset = earr[1]; break; } OVI.setMarker(boundCenterBottom(makerset)); LIST_INFO.add(OVI); } }else{ Log.w("-->", "LIST_ITEM_TABLE = NULL"); } populate(); } //마커의 그림자를 셋팅함. @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); boundCenterBottom(maker); /*if(zoomlevel != mapView.getZoomLevel()){ zoomlevel = mapView.getZoomLevel(); Log.w("-->", "RESET_DRAW"); resetdraw(); }*/ } @Override protected OverlayItem createItem(int i) { // TODO Auto-generated method stub return LIST_INFO.get(i); }
@Override public int size() { return LIST_INFO.size(); } @Override protected boolean onTap(int index) { Toast.makeText(map_view_main.this, LIST_INFO.get(index).getTitle(), Toast.LENGTH_SHORT).show(); OverlayItem OVI = LIST_INFO.get(index); if(point != null){ Mailes_length = LOCATION_TO_LOCATION_LENGTH(point,OVI.getPoint()); } mapControl.animateTo(OVI.getPoint()); return super.onTap(index); } @Override public boolean onTouchEvent(MotionEvent event, MapView mapView) { // TODO Auto-generated method stub if(event.getAction() == MotionEvent.ACTION_UP){ if(zoomlevel != mapView.getZoomLevel()){ zoomlevel = mapView.getZoomLevel(); Log.w("-->","ZOOM_LEVEL_CHANGE="); resetdraw(); } } return super.onTouchEvent(event, mapView); } }
이렇게 했는데 문제는 터치할때는 잘되는데요
기본으로 주는 setBuiltInZoomControls 이걸로 줌인/아웃을 하면 안되네요 (당연하지만 ㅠ_ㅠ)
이경우에는 줌인 줌 아웃 버튼을 만들어서 구현해야 할까요 ?
아니면 다른 방법이 있나요 ?