From 85476a061cc854014d28b96690b160843fe95e60 Mon Sep 17 00:00:00 2001 From: sjtufs Date: Wed, 28 Aug 2013 22:20:33 +0800 Subject: fix #26 : add marker by long press --- client/Piztor/.classpath | 8 +- client/Piztor/.project | 33 +++ client/Piztor/AndroidManifest.xml | 4 +- client/Piztor/ic_launcher-web.png | Bin 0 -> 130248 bytes client/Piztor/proguard-project.txt | 20 ++ client/Piztor/project.properties | 14 + .../Piztor/src/com/macaroon/piztor/MapMaker.java | 305 ++++++++++++++------- 7 files changed, 274 insertions(+), 110 deletions(-) create mode 100644 client/Piztor/.project create mode 100644 client/Piztor/ic_launcher-web.png create mode 100644 client/Piztor/proguard-project.txt create mode 100644 client/Piztor/project.properties diff --git a/client/Piztor/.classpath b/client/Piztor/.classpath index 1c0c6e1..2c647e0 100644 --- a/client/Piztor/.classpath +++ b/client/Piztor/.classpath @@ -1,11 +1,11 @@ - - - - + + + + diff --git a/client/Piztor/.project b/client/Piztor/.project new file mode 100644 index 0000000..97100ec --- /dev/null +++ b/client/Piztor/.project @@ -0,0 +1,33 @@ + + + Piztor + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/client/Piztor/AndroidManifest.xml b/client/Piztor/AndroidManifest.xml index c026975..f336200 100644 --- a/client/Piztor/AndroidManifest.xml +++ b/client/Piztor/AndroidManifest.xml @@ -57,13 +57,13 @@ mItems = null; private LocationOverlay mLocationOverlay; + private ArrayList mItems = null; + private MapInfo preMapInfo = null; + + // marker layer + private MyOverlay markerOverlay; + private OverlayItem nowMarker = null; + + // private Context context; - private MKMapTouchListener mapTouchListener; - boolean isFirstLoc = true; - /** - * popups - */ + private MKMapTouchListener mapTouchListener; + + // Popup component private PopupOverlay popLay = null; private TextView popupText = null; private View viewCache = null; private View popupInfo = null; - public MapMaker(MapView mapView, Context c) { + /** + * Constructor + */ + public MapMaker(MapView mapView, Context cc) { + mMapView = mapView; mMapController = mMapView.getController(); + mMapController.setCenter(sjtuCenter); - mMapController.setZoom(17); + mMapController.setZoom(16); mMapController.setRotation(-22); mMapController.enableClick(true); - context = c; + + context = cc; mLocationOverlay = null; mOverlay = null; } + /** + * Layer for my location + */ public class LocationOverlay extends MyLocationOverlay { + public LocationOverlay(MapView mapView) { super(mapView); } } - public class MyOverlay extends ItemizedOverlay{ - public MyOverlay(Drawable defaultMarker, MapView mapView) { - super(defaultMarker, mapView); + /** + * Layer for items(other users) + */ + public class MyOverlay extends ItemizedOverlay { + + public MyOverlay(Drawable defaultMaker, MapView mapView) { + super(defaultMaker, mapView); } - + @Override - public boolean onTap(int index){ - Log.d("123", "Marker tap"); + public boolean onTap(int index) { + OverlayItem item = getItem(index); - popupText.setText("^ _ ^"); - Bitmap bitmap = BMapUtil.getBitmapFromView(popupInfo); - popLay.showPopup(bitmap,item.getPoint(),32); + //TODO + ///////////////////////////////////////////////////////// + popupText.setText("^_^"); + Bitmap bitmap = BMapUtil.getBitmapFromView(popupInfo); + popLay.showPopup(bitmap, item.getPoint(),32); + return true; } - - @Override - public boolean onTap(GeoPoint pt, MapView mMapView){ - Log.d("123", "Marker tap disappear"); - if (popLay != null){ - popLay.hidePop(); + @Override + public boolean onTap(GeoPoint pt, MapView mapView) { + + if(popLay != null) { + popLay.hidePop(); } - return false; - } - } - public void UpdateLocationOverlay(LocationData locationData, boolean hasAnimation) { - /** - * Update only location overlay - */ - mLocationOverlay.setData(locationData); - mMapView.refresh(); - if (hasAnimation || isFirstLoc) { - mMapController.animateTo(new GeoPoint((int)(locationData.latitude * 1E6), (int)(locationData.longitude * 1E6))); + return false; } - isFirstLoc = true; } - - public void InitMap() { - /** - * Initialize LocationOverlay - */ - Log.d("GPS", "init"); + + /** + * Initialize location layer + */ + public void InitLocationOverlay() { + mLocationOverlay = new LocationOverlay(mMapView); - //mLocationOverlay.setMarker(context.getResources().getDrawable(R.drawable.marker1)); LocationData locationData = new LocationData(); mLocationOverlay.setData(locationData); mMapView.getOverlays().add(mLocationOverlay); mLocationOverlay.enableCompass(); mMapView.refresh(); - mOverlay = new MyOverlay(context.getResources().getDrawable(R.drawable.circle_red), mMapView); - Log.d("123", "MapView initialized"); + } - /** - * Initialize pop up - */ - LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); - Log.d("123", "OK 0"); + /** + * Initialize other users layer + */ + public void InitMyOverLay() { + + //TODO + ///////////////////////////////////////////////////////////////// + mOverlay = new MyOverlay(context.getResources().getDrawable(R.drawable.circle_red), mMapView); + markerOverlay = new MyOverlay(context.getResources().getDrawable(R.drawable.marker1), mMapView); + } + + /** + * Initialize popup + */ + public void InitPopup() { + + LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); viewCache = inflater.inflate(R.layout.custom_text_view, null); - Log.d("123", "OK 1"); - popupInfo = (View) viewCache.findViewById(R.id.popinfo); - Log.d("123", "OK 2"); - popupText = (TextView) viewCache.findViewById(R.id.textcache); - Log.d("123", "OK 3"); - Log.d("123", "Popup initialized"); + popupInfo = (View)viewCache.findViewById(R.id.popinfo); + popupText = (TextView)viewCache.findViewById(R.id.textcache); - PopupClickListener popListener = new PopupClickListener() { + @Override public void onClickedPopup(int index) { - // + // when the popup is clicked + if (index == 0) { + // do nothing + } + if (index == 1) { + // this is a marker and remove it + } } }; + popLay = new PopupOverlay(mMapView, popListener); + } + + + /** + * Initialize touch listener + */ + public void InitTouchListenr() { - /** - * Initialize touch listener - */ - /** - * TODO - */ mapTouchListener = new MKMapTouchListener() { + @Override - public void onMapClick(GeoPoint point) { - System.out.println("++++++++++++++++++++++++++++++++ SingleClick " - + point.getLatitudeE6() * 1E-6 + " " + point.getLongitudeE6() * 1E-6); + public void onMapLongClick(GeoPoint arg0) { + DrawMarker(arg0); + Log.d("marker", "draw a new marker"); } - + @Override - public void onMapDoubleClick(GeoPoint point) { - System.out.println("++++++++++++++++++++++++++++++++ DoubleClick " - + point.getLatitudeE6() * 1E-6 + " " + point.getLongitudeE6() * 1E-6); + public void onMapDoubleClick(GeoPoint arg0) { + // TODO Auto-generated method stub + } - + @Override - public void onMapLongClick(GeoPoint point) { - System.out.println("++++++++++++++++++++++++++++++++ LongClick " - + point.getLatitudeE6() * 1E-6 + " " + point.getLongitudeE6() * 1E-6); + public void onMapClick(GeoPoint arg0) { + // TODO Auto-generated method stub + } }; mMapView.regMapTouchListner(mapTouchListener); + } + + /** + * Initialize map + */ + public void InitMap() { + + InitLocationOverlay(); + InitMyOverLay(); + InitPopup(); + InitTouchListenr(); + } + /** + * Update location layer when new location is received + */ + public void UpdateLocationOverlay(LocationData locationData, boolean hasAnimation) { + + mLocationOverlay.setData(locationData); + mMapView.refresh(); + if (hasAnimation) { + mMapController.animateTo(new GeoPoint((int)(locationData.latitude * 1E6) + , (int)(locationData.longitude * 1E6))); + } } + /** + * Update to draw other users + */ public void UpdateMap(MapInfo mapInfo) { - /** - * Update location of others - */ - if (mOverlay != null && mOverlay.getAllItem().size() != 0) { - clearOverlay(mMapView); + + if (mapInfo != null) { + preMapInfo = mapInfo; + if (mOverlay != null && mOverlay.getAllItem().size() != 0) { + mOverlay.removeAll(); + } + mOverlay = new MyOverlay(context.getResources().getDrawable(R.drawable.circle_red), mMapView); + GeoPoint p; + Vector allUsers = mapInfo.getVector(); + for (int i = 0; i < allUsers.size(); i++) { + // it's me! + if (allUsers.get(i).uid == Infomation.myInfo.uid) continue; + p = new GeoPoint((int)(allUsers.get(i).getLatitude() * 1E6), + (int)(allUsers.get(i).getLongitude()*1E6)); + curItem = new OverlayItem(p, "USERNAME HERE!!!!!", ""); + //TODO + //////////////////////////////////////////////////////////// + curItem.setMarker(context.getResources().getDrawable(R.drawable.circle_red)); + mOverlay.addItem(curItem); + } + mItems = new ArrayList(); + mItems.addAll(mOverlay.getAllItem()); } - mOverlay = new MyOverlay(context.getResources().getDrawable(R.drawable.circle_red), mMapView); - //mMapView.refresh(); - GeoPoint p; - Vector allUsers = mapInfo.getVector(); - System.out.println("SSSSSSSSSSSSSSSSize "+allUsers.size()); - for(int i = 0; i < allUsers.size(); i++) { - if (allUsers.get(i).uid == Infomation.myInfo.uid) continue; - p = new GeoPoint((int)(allUsers.get(i).getLatitude() * 1E6) - ,(int)(allUsers.get(i).getLongitude() * 1E6)); - curItem = new OverlayItem(p, "^_^", ""); - curItem.setMarker(context.getResources().getDrawable(R.drawable.circle_red)); - mOverlay.addItem(curItem); + if (nowMarker != null) { + Log.d("marker", "now marker is not null"); + mOverlay.addItem(nowMarker); } - mItems = new ArrayList(); - mItems.addAll(mOverlay.getAllItem()); if (mMapView != null) { if (mMapView.getOverlays() != null) { mMapView.getOverlays().add(mOverlay); @@ -222,19 +286,52 @@ public class MapMaker extends Activity{ } } } + + /** + * Update marker + */ + public void UpdateMarker() { + + mOverlay.addItem(nowMarker); + if (mMapView != null) { + mMapView.getOverlays().add(mOverlay); + mMapView.refresh(); + } + } + + /** + * Draw a marker + */ + public void DrawMarker(GeoPoint markerPoint) { + + nowMarker = new OverlayItem(markerPoint, "THIS IS A MARKER", ""); + nowMarker.setMarker(context.getResources().getDrawable(R.drawable.marker1)); + Log.d("marker", "new marker created"); + System.out.println("mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm " + markerPoint.getLatitudeE6() + " " + markerPoint.getLongitudeE6()); + + UpdateMap(preMapInfo); + } - + /** + * Remove all other users + */ public void clearOverlay(View view) { - mOverlay.removeAll(); - mMapView.refresh(); + + if(mOverlay != null && mOverlay.getAllItem().size() != 0) { + mOverlay.removeAll(); + mMapView.refresh(); + } } + /** + * Reset other users over lay + */ public void resetOverlay(View view) { + clearOverlay(null); mOverlay.addItem(mItems); - mMapView.refresh(); } - + @Override protected void onPause() { mMapView.onPause(); @@ -243,11 +340,11 @@ public class MapMaker extends Activity{ @Override protected void onResume() { mMapView.onResume(); - } + } @Override protected void onDestroy() { mMapView.destroy(); } + } - -- cgit v1.2.3 From 956c10597fa5e504eab9255a5fde61a54c6f1972 Mon Sep 17 00:00:00 2001 From: sjtufs Date: Wed, 28 Aug 2013 23:20:56 +0800 Subject: final version of 20130828 from lym and fs --- client/Piztor/res/drawable/circle_green.png | Bin 0 -> 1079 bytes client/Piztor/src/com/macaroon/piztor/Main.java | 71 +++++++++++++-------- .../Piztor/src/com/macaroon/piztor/MapMaker.java | 10 ++- 3 files changed, 51 insertions(+), 30 deletions(-) create mode 100644 client/Piztor/res/drawable/circle_green.png diff --git a/client/Piztor/res/drawable/circle_green.png b/client/Piztor/res/drawable/circle_green.png new file mode 100644 index 0000000..ded6938 Binary files /dev/null and b/client/Piztor/res/drawable/circle_green.png differ diff --git a/client/Piztor/src/com/macaroon/piztor/Main.java b/client/Piztor/src/com/macaroon/piztor/Main.java index 5aa767d..03e7ebc 100644 --- a/client/Piztor/src/com/macaroon/piztor/Main.java +++ b/client/Piztor/src/com/macaroon/piztor/Main.java @@ -4,8 +4,6 @@ import java.util.Timer; import java.util.TimerTask; import android.annotation.SuppressLint; -import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -21,15 +19,10 @@ import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; -import com.baidu.mapapi.map.ItemizedOverlay; import com.baidu.mapapi.map.LocationData; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.OverlayItem; -import com.baidu.mapapi.map.PopupClickListener; import com.baidu.mapapi.map.PopupOverlay; -import com.baidu.platform.comapi.basestruct.GeoPoint; - -import com.macaroon.piztor.BMapUtil; public class Main extends PiztorAct { final static int SearchButtonPress = 1; @@ -39,9 +32,23 @@ public class Main extends PiztorAct { final static int Fetch = 6; final static int mapViewtouched = 7; + /** + * popups + */ + private PopupOverlay pop = null; + private TextView popupText = null; + private View viewCache = null; + private View popupInfo = null; + private View popupLeft = null; + private View popupRight = null; + private MapView.LayoutParams layoutParam = null; + private OverlayItem mCurItem = null; + MapMaker mapMaker = null; MapView mMapView; + boolean isFirstLocation = true; + /** * Locating component */ @@ -50,7 +57,7 @@ public class Main extends PiztorAct { public MyLocationListener myListener = new MyLocationListener(); ImageButton btnSearch, btnFetch, btnFocus, btnSettings; - //Timer autodate; + // Timer autodate; MapInfo mapInfo; /* * @SuppressLint("HandlerLeak") Handler fromGPS = new Handler() { @@ -100,11 +107,7 @@ public class Main extends PiztorAct { + " group : " + r.gid); if (r.uid == Infomation.myInfo.uid) { Infomation.myInfo.gid = r.gid; - try { - //autodate.schedule(new AutoUpdate(), 0, 5000); - } catch (Exception e) { - e.printStackTrace(); - } + Infomation.myInfo.sex = r.sex; } else { UserInfo user = mapInfo.getUserInfo(r.uid); if (user != null) @@ -119,9 +122,14 @@ public class Main extends PiztorAct { } break; case 4:// 登出 - Toast toast = Toast.makeText(getApplicationContext(), - "logout failed", Toast.LENGTH_LONG); - toast.show(); + ResLogout logout = (ResLogout) m.obj; + if (logout.s == 0) { + actMgr.trigger(AppMgr.logout); + } else { + Toast toast = Toast.makeText(getApplicationContext(), + "logout failed", Toast.LENGTH_LONG); + toast.show(); + } break; default: break; @@ -150,6 +158,9 @@ public class Main extends PiztorAct { void flushMap() { if (mapMaker != null) mapMaker.UpdateMap(AppMgr.mapInfo); + else + System.out + .println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); } public class MyLocationListener implements BDLocationListener { @@ -165,9 +176,14 @@ public class Main extends PiztorAct { locData.accuracy = location.getRadius(); locData.direction = location.getDerect(); - mapMaker.UpdateLocationOverlay(locData, false); - if (Infomation.token != null) - AppMgr.transam.send(new ReqUpdate(Infomation.token, Infomation.username, locData.latitude, locData.longitude, System.currentTimeMillis(), 2000)); + mapMaker.UpdateLocationOverlay(locData, isFirstLocation); + isFirstLocation = false; + if (Infomation.token != null) { + AppMgr.transam.send(new ReqUpdate(Infomation.token, + Infomation.username, locData.latitude, + locData.longitude, System.currentTimeMillis(), 2000)); + Infomation.myInfo.setLocation(locData.latitude, locData.longitude); + } } @Override @@ -236,9 +252,7 @@ public class Main extends PiztorAct { requesLocation(Infomation.myInfo.gid); break; case FocuseButtonPress: - if( locData != null) { - mapMaker.UpdateLocationOverlay(locData, true); - } else mapMaker.InitMap(); + mapMaker.UpdateLocationOverlay(locData, true); break; case SuccessFetch: flushMap(); @@ -293,16 +307,13 @@ public class Main extends PiztorAct { actMgr.add(focusStatus, mapViewtouched, startStatus); actMgr.add(focusStatus, SuccessFetch, focusStatus); actMgr.add(focusStatus, Fetch, focusStatus); - //autodate = new Timer(); - flushMap(); setContentView(R.layout.activity_main); mMapView = (MapView) findViewById(R.id.bmapView); mapMaker = new MapMaker(mMapView, getApplicationContext()); + mapMaker.clearOverlay(mMapView); mapMaker.InitMap(); mLocClient = new LocationClient(this); locData = new LocationData(); - locData.latitude = 31.032247; - locData.longitude = 121.445937; mLocClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); @@ -313,6 +324,10 @@ public class Main extends PiztorAct { mapMaker.UpdateLocationOverlay(locData, false); } + /* + * public boolean onTap(int index) { OverlayItem item = getItem(index); + * mCurItem = item; if () } + */ @Override protected void onStart() { super.onStart(); @@ -344,6 +359,7 @@ public class Main extends PiztorAct { @Override protected void onResume() { mapMaker.onResume(); + flushMap(); super.onResume(); } @@ -356,7 +372,6 @@ public class Main extends PiztorAct { @Override public void onStop() { super.onStop(); - //autodate.cancel(); } @Override @@ -397,4 +412,4 @@ public class Main extends PiztorAct { mMapView.onRestoreInstanceState(savedInstanceState); } -} +} \ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/MapMaker.java b/client/Piztor/src/com/macaroon/piztor/MapMaker.java index 8af00ea..4e30df6 100644 --- a/client/Piztor/src/com/macaroon/piztor/MapMaker.java +++ b/client/Piztor/src/com/macaroon/piztor/MapMaker.java @@ -261,7 +261,8 @@ public class MapMaker extends Activity { mOverlay = new MyOverlay(context.getResources().getDrawable(R.drawable.circle_red), mMapView); GeoPoint p; Vector allUsers = mapInfo.getVector(); - for (int i = 0; i < allUsers.size(); i++) { + boolean flag = false; + for (int i =1; i < allUsers.size(); i++) { // it's me! if (allUsers.get(i).uid == Infomation.myInfo.uid) continue; p = new GeoPoint((int)(allUsers.get(i).getLatitude() * 1E6), @@ -269,7 +270,12 @@ public class MapMaker extends Activity { curItem = new OverlayItem(p, "USERNAME HERE!!!!!", ""); //TODO //////////////////////////////////////////////////////////// - curItem.setMarker(context.getResources().getDrawable(R.drawable.circle_red)); + if (flag == false){ + flag = true; + curItem.setMarker(context.getResources().getDrawable(R.drawable.circle_green)); + } else { + curItem.setMarker(context.getResources().getDrawable(R.drawable.circle_red)); + } mOverlay.addItem(curItem); } mItems = new ArrayList(); -- cgit v1.2.3