From 68ed59a88f2409f632c3731c0e5dc246713676a2 Mon Sep 17 00:00:00 2001 From: Goblin911 Date: Wed, 28 Aug 2013 16:32:26 +0800 Subject: Fixed screen-rotation bug --- client/Piztor/src/com/macaroon/piztor/AppMgr.java | 7 +- .../Piztor/src/com/macaroon/piztor/BMapUtil.java | 22 +++++ client/Piztor/src/com/macaroon/piztor/Main.java | 44 ++++++++-- .../Piztor/src/com/macaroon/piztor/MapMaker.java | 31 +++---- .../com/macaroon/piztor/MultiTouchListener.java | 98 ---------------------- 5 files changed, 76 insertions(+), 126 deletions(-) create mode 100644 client/Piztor/src/com/macaroon/piztor/BMapUtil.java delete mode 100644 client/Piztor/src/com/macaroon/piztor/MultiTouchListener.java (limited to 'client/Piztor/src/com') diff --git a/client/Piztor/src/com/macaroon/piztor/AppMgr.java b/client/Piztor/src/com/macaroon/piztor/AppMgr.java index 8e82384..aed8ca6 100644 --- a/client/Piztor/src/com/macaroon/piztor/AppMgr.java +++ b/client/Piztor/src/com/macaroon/piztor/AppMgr.java @@ -15,10 +15,8 @@ import com.baidu.mapapi.MKGeneralListener; @SuppressLint("UseSparseArrays") public class AppMgr { - private static final String strKey = "5ba8abf7b4694ad49706b8b7538c9d6a"; + private static final String strKey = "8a0ae50048d103b2b8b12b7066f4ea7d"; static BMapManager mBMapManager = null; - static Context context; - // Status public enum ActivityStatus { @@ -83,6 +81,8 @@ public class AppMgr { i.putExtra("status", true); else i.putExtra("status", false); } + if (event == loginSuccess) mBMapManager.start(); + if (event == logout) mBMapManager.stop(); nowAct.startActivity(i); } @@ -127,7 +127,6 @@ public class AppMgr { } }); } - AppMgr.context = context; mp = new HashMap, HashMap>>(); handler = new Handler(); transam = new Transam(Infomation.ip, Infomation.port, handler); diff --git a/client/Piztor/src/com/macaroon/piztor/BMapUtil.java b/client/Piztor/src/com/macaroon/piztor/BMapUtil.java new file mode 100644 index 0000000..04e2e71 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/BMapUtil.java @@ -0,0 +1,22 @@ +package com.macaroon.piztor; + +import android.graphics.Bitmap; +import android.view.View; + +public class BMapUtil { + + /** + * 从view 得到图片 + * @param view + * @return + */ + public static Bitmap getBitmapFromView(View view) { + view.destroyDrawingCache(); + view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); + view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); + view.setDrawingCacheEnabled(true); + Bitmap bitmap = view.getDrawingCache(true); + return bitmap; + } +} diff --git a/client/Piztor/src/com/macaroon/piztor/Main.java b/client/Piztor/src/com/macaroon/piztor/Main.java index 2820090..c3f6047 100644 --- a/client/Piztor/src/com/macaroon/piztor/Main.java +++ b/client/Piztor/src/com/macaroon/piztor/Main.java @@ -12,6 +12,7 @@ import android.view.KeyEvent; import android.view.Menu; import android.view.View; import android.widget.ImageButton; +import android.widget.TextView; import android.widget.Toast; import com.baidu.location.BDLocation; @@ -20,6 +21,8 @@ import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.map.LocationData; import com.baidu.mapapi.map.MapView; +import com.baidu.mapapi.map.OverlayItem; +import com.baidu.mapapi.map.PopupOverlay; public class Main extends PiztorAct { final static int SearchButtonPress = 1; @@ -29,6 +32,19 @@ 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; @@ -40,7 +56,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() { @@ -91,7 +107,7 @@ public class Main extends PiztorAct { if (r.uid == Infomation.myInfo.uid) { Infomation.myInfo.gid = r.gid; try { - autodate.schedule(new AutoUpdate(), 0, 5000); + //autodate.schedule(new AutoUpdate(), 0, 5000); } catch (Exception e) { e.printStackTrace(); } @@ -138,7 +154,9 @@ public class Main extends PiztorAct { // TODO flush map view void flushMap() { - + if (mapMaker != null) + mapMaker.UpdateMap(AppMgr.mapInfo); + else System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); } public class MyLocationListener implements BDLocationListener { @@ -155,7 +173,8 @@ public class Main extends PiztorAct { 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)); } @Override @@ -224,10 +243,10 @@ public class Main extends PiztorAct { requesLocation(Infomation.myInfo.gid); break; case FocuseButtonPress: - // TODO setFocus + mapMaker.UpdateLocationOverlay(locData, true); break; case SuccessFetch: - requesLocation(Infomation.myInfo.gid); + flushMap(); break; default: break; @@ -279,7 +298,7 @@ public class Main extends PiztorAct { actMgr.add(focusStatus, mapViewtouched, startStatus); actMgr.add(focusStatus, SuccessFetch, focusStatus); actMgr.add(focusStatus, Fetch, focusStatus); - autodate = new Timer(); + //autodate = new Timer(); flushMap(); // ImageView view = (ImageView) findViewById(R.id.main_mapview); // view.setOnTouchListener(new MultiTouchListener()); @@ -297,8 +316,15 @@ public class Main extends PiztorAct { mLocClient.setLocOption(option); mLocClient.start(); mapMaker.UpdateLocationOverlay(locData, false); - } + } + /* + public boolean onTap(int index) { + OverlayItem item = getItem(index); + mCurItem = item; + if () + } + */ @Override protected void onStart() { super.onStart(); @@ -342,7 +368,7 @@ public class Main extends PiztorAct { @Override public void onStop() { super.onStop(); - autodate.cancel(); + //autodate.cancel(); } @Override diff --git a/client/Piztor/src/com/macaroon/piztor/MapMaker.java b/client/Piztor/src/com/macaroon/piztor/MapMaker.java index bdc3554..89f29fc 100644 --- a/client/Piztor/src/com/macaroon/piztor/MapMaker.java +++ b/client/Piztor/src/com/macaroon/piztor/MapMaker.java @@ -101,38 +101,39 @@ public class MapMaker extends Activity{ mMapView.getOverlays().add(mLocationOverlay); mLocationOverlay.enableCompass(); mMapView.refresh(); + mOverlay = new MyOverlay(context.getResources().getDrawable(R.drawable.circle_red), mMapView); } public void UpdateMap(MapInfo mapInfo) { - /** - * Update Location Overlay - */ - GeoPoint location = mapInfo.getMyInfo().getLocation(); - LocationData locationData = new LocationData(); - locationData.latitude = location.getLatitudeE6() / 1e6; - locationData.longitude = location.getLongitudeE6() / 1e6; - mLocationOverlay.setData(locationData); - mMapView.refresh(); - /** * Update location of others */ - mOverlay.removeAll(); + if (mOverlay != null && mOverlay.getAllItem().size() != 0) { + System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); + clearOverlay(mMapView); + System.out.println("+++++++++++++++++++++++------------------------------------------"); + } + 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.marka)); + curItem.setMarker(context.getResources().getDrawable(R.drawable.circle_red)); mOverlay.addItem(curItem); } mItems = new ArrayList(); mItems.addAll(mOverlay.getAllItem()); - mMapView.getOverlays().add(mOverlay); - mMapView.refresh(); + if (mMapView != null) { + if (mMapView.getOverlays() != null) { + mMapView.getOverlays().add(mOverlay); + mMapView.refresh(); + } + } } diff --git a/client/Piztor/src/com/macaroon/piztor/MultiTouchListener.java b/client/Piztor/src/com/macaroon/piztor/MultiTouchListener.java deleted file mode 100644 index cf4911b..0000000 --- a/client/Piztor/src/com/macaroon/piztor/MultiTouchListener.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.macaroon.piztor; - -import android.annotation.SuppressLint; -import android.graphics.Matrix; -import android.graphics.PointF; -import android.util.FloatMath; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnTouchListener; -import android.widget.ImageView; - -@SuppressLint("FloatMath") -public class MultiTouchListener implements OnTouchListener { - - private Matrix matrix = new Matrix(); - private Matrix preMatrix = new Matrix(); - - private static final int NONE = 0; - private static final int DRAG = 1; - private static final int ZOOM = 2; - private int mode = NONE; - - private PointF start = new PointF(); - private PointF mid = new PointF(); - private float preDis = 1f; - /*private float d = 0f; - private float newRot = 0f; - private float[] values;*/ - - @Override - public boolean onTouch(View v, MotionEvent event) { - float[] values = new float[9]; - matrix.getValues(values); - //System.out.println("1111111"+values[1]); - //Log.d("Touch", "onTouch......."); - ImageView view = (ImageView) v; - switch (event.getAction() & MotionEvent.ACTION_MASK) { - case MotionEvent.ACTION_DOWN: - //Log.d("Touch", "ACTION_DOWN"); - preMatrix.set(matrix); - start.set(event.getX(), event.getY()); - mode = DRAG; - break; - case MotionEvent.ACTION_POINTER_DOWN: - //Log.d("Touch", "ACTION_POINTER_DOWN"); - preDis = spacing(event); - if(preDis > 10f) { - preMatrix.set(matrix); - midPoint(mid, event); - mode = ZOOM; - } - break; - case MotionEvent.ACTION_UP: - //Log.d("Touch", "ACTION_UP"); - case MotionEvent.ACTION_POINTER_UP: - //Log.d("Touch", "ACTION_POINTER_UP"); - mode = NONE; - break; - case MotionEvent.ACTION_MOVE: - //Log.d("Touch", "ACTION_MOVE"); - if(mode == DRAG) { - //Log.d("Touch", "Draging"); - matrix.set(preMatrix); - float dx = event.getX() - start.x; - float dy = event.getY() - start.y; - matrix.postTranslate(dx, dy); - } else if (mode == ZOOM) { - //Log.d("Touch","Zooming"); - float newDis = spacing(event); - if (newDis > 10f) { - matrix.set(preMatrix); - float scale = (newDis / preDis); - matrix.postScale(scale,scale,mid.x,mid.y); - //System.out.println("ssssssssssssssssss" + scale); - } - } - break; - } - matrix.getValues(values); - //System.out.println("222222"+values[1]); - view.setImageMatrix(matrix); - matrix.getValues(values); - //System.out.println("333333"+values[1]); - return true; - } - - private float spacing(MotionEvent event) { - float x = event.getX(0) - event.getX(1); - float y = event.getY(0) - event.getY(1); - return FloatMath.sqrt(x * x + y * y); - } - - private void midPoint(PointF point, MotionEvent event) { - float x = event.getX(0) + event.getY(1); - float y = event.getY(0) + event.getY(1); - point.set(x / 2, y / 2); - } -} -- cgit v1.2.3-70-g09d2