2012-08-30 105 views
0

我在地圖視圖上繪製了一些標記(來自一個drawable),但我想在每個標記上顯示不同的數字。在地圖上繪製標記上的不同字符串

數字存儲在一個數組中。我做了一個函數寫文字上面繪製的,這裏是我做過什麼:

List<Overlay> mapOverlays = mapView.getOverlays(); 
GeoPoint geoPoint = null; 
Drawable marker; 
int size = addresses.length; 

marker = writeOnDrawable(R.drawable.marker, "10");//my number to write here 
itemizedOverlay = new ItemizedOverlay(marker, mapView); 

for(int i = 0; i < size; i++) { 
    geoPoint = new GeoPoint((int) (latitudes[i] * 1E6), (int) (longitudes[i] * 1E6)); 

    itemizedOverlay.addOverlay(new OverlayItem(geoPoint, addresses[i], "")); 
} 

mapOverlays.add(itemizedOverlay); 

然而,在這段代碼中,我顯示相同數量的所有標記,我想用我的電話號碼的數組爲每個人顯示不同的號碼。

這是否意味着我必須使用盡可能多的ItemizedOverlay,因爲我有數字? 或者你有什麼建議嗎?

回答

0

我終於通過使用幾個ItemizedOverlay得到了它的工作。 我把這個在的開始for循環:

itemizedOverlay = new ItemizedOverlay(marker, mapView); 

,這也結尾:

mapOverlays.add(itemizedOverlay); 

一切正常我的設備(GN),直到我測試了它在虛擬機上我得到這個:

09-02 09:36:56.335: E/dalvikvm-heap(231): 20424-byte external allocation too large for this process. 
09-02 09:36:56.335: E/(231): VM won't let us allocate 20424 bytes 
09-02 09:36:56.335: W/dalvikvm(231): threadid=3: thread exiting with uncaught exception (group=0x4001aa28) 
09-02 09:36:56.335: E/AndroidRuntime(231): Uncaught handler: thread main exiting due to uncaught exception 
09-02 09:36:56.386: E/AndroidRuntime(231): android.view.InflateException: Binary XML file line #2: Error inflating class java.lang.reflect.Constructor 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.LayoutInflater.createView(LayoutInflater.java:512) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:562) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.LayoutInflater.inflate(LayoutInflater.java:385) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.readystatesoftware.mapviewballoons.BalloonOverlayView.setupView(BalloonOverlayView.java:79) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.readystatesoftware.mapviewballoons.BalloonOverlayView.<init>(BalloonOverlayView.java:58) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.readystatesoftware.mapviewballoons.BalloonItemizedOverlay.createBalloonOverlayView(BalloonItemizedOverlay.java:151) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.readystatesoftware.mapviewballoons.BalloonItemizedOverlay.createAndDisplayBalloonOverlay(BalloonItemizedOverlay.java:284) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.readystatesoftware.mapviewballoons.BalloonItemizedOverlay.onTap(BalloonItemizedOverlay.java:126) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:453) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:346) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.GestureDetector.onTouchEvent(GestureDetector.java:506) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.google.android.maps.MapView.onTouchEvent(MapView.java:628) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.readystatesoftware.maps.TapControlledMapView.onTouchEvent(TapControlledMapView.java:62) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.View.dispatchTouchEvent(View.java:3672) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:850) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1712) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1202) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.app.Activity.dispatchTouchEvent(Activity.java:1987) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.ViewRoot.handleMessage(ViewRoot.java:1658) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.os.Looper.loop(Looper.java:123) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.app.ActivityThread.main(ActivityThread.java:4203) 
09-02 09:36:56.386: E/AndroidRuntime(231): at java.lang.reflect.Method.invokeNative(Native Method) 
09-02 09:36:56.386: E/AndroidRuntime(231): at java.lang.reflect.Method.invoke(Method.java:521) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
09-02 09:36:56.386: E/AndroidRuntime(231): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
09-02 09:36:56.386: E/AndroidRuntime(231): at dalvik.system.NativeStart.main(Native Method) 
09-02 09:36:56.386: E/AndroidRuntime(231): Caused by: java.lang.reflect.InvocationTargetException 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.widget.LinearLayout.<init>(LinearLayout.java:92) 
09-02 09:36:56.386: E/AndroidRuntime(231): at java.lang.reflect.Constructor.constructNative(Native Method) 
09-02 09:36:56.386: E/AndroidRuntime(231): at java.lang.reflect.Constructor.newInstance(Constructor.java:446) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view.LayoutInflater.createView(LayoutInflater.java:499) 
09-02 09:36:56.386: E/AndroidRuntime(231): ... 35 more 
09-02 09:36:56.386: E/AndroidRuntime(231): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:439) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:322) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:688) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.content.res.Resources.loadDrawable(Resources.java:1710) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.content.res.Resources.getDrawable(Resources.java:585) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:146) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:779) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:720) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.content.res.Resources.loadDrawable(Resources.java:1695) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.content.res.TypedArray.getDrawable(TypedArray.java:548) 
09-02 09:36:56.386: E/AndroidRuntime(231): at android.view 

正如我擔心,它需要大量的內存......有沒有辦法避免這種情況? 您是否認爲這也會發生在低內存設備上?