2012-12-22 18 views
0

我为我的mapview叠加了覆盖图。我绘制了标记以显示发生了地震的地方,但我正在试图绘制文字以显示标记旁边地震的强度。问题是文本出现,但一旦地图被触摸(我认为这是当叠加层的onDraw被执行时),文本消失。这是我的代码。任何将不胜感激。这里是我的代码:Android文本在地图叠加层上消失

import java.util.ArrayList; 

import android.content.Context; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Point; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.Projection; 

public class EarthquakeOverlay extends Overlay { 
Context c; 
int counter = 0; 
Cursor earthquakes; 
ArrayList<GeoPoint> quakeLocations; 
ArrayList<String> mags; 
int rad = 5; 
String g; 

public EarthquakeOverlay(Cursor cursor, Context con) { 
    super(); 
    earthquakes = cursor; 
    c = con; 
    mags = new ArrayList<String>(); 
    quakeLocations = new ArrayList<GeoPoint>(); 
    refreshQuakeLocations(); 
} 

public void swapCursor(Cursor cursor) { 
    earthquakes = cursor; 
    refreshQuakeLocations(); 
} 

private void refreshQuakeLocations() { 
    quakeLocations.clear(); 

    if (earthquakes != null && earthquakes.moveToFirst()) 
     do { 
      int magIndex = earthquakes 
        .getColumnIndexOrThrow(EarthquakeProvider.KEY_MAGNITUDE); 

      String mag = earthquakes.getString(magIndex); 

      mags.add(mag); 

      int latIndex = earthquakes 
        .getColumnIndexOrThrow(EarthquakeProvider.KEY_LOCATION_LAT); 
      int lngIndex = earthquakes 
        .getColumnIndexOrThrow(EarthquakeProvider.KEY_LOCATION_LNG); 

      Double lat = earthquakes.getFloat(latIndex) * 1E6; 
      Double lng = earthquakes.getFloat(lngIndex) * 1E6; 

      GeoPoint geoPoint = new GeoPoint(lat.intValue(), lng.intValue()); 
      quakeLocations.add(geoPoint); 

     } while (earthquakes.moveToNext()); 
} 

public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    Projection projection = mapView.getProjection(); 

    Bitmap flag = BitmapFactory.decodeResource(c.getResources(), 
      R.drawable.marker); 

    Paint bitmapPaint = new Paint(); 
    bitmapPaint.setFilterBitmap(false); 
    bitmapPaint.setAntiAlias(true); 

    Point globalPoint = new Point(); 

    // Create and setup your paint brush 
    Paint paint = new Paint(); 
    paint.setColor(Color.BLUE); 
    paint.setAntiAlias(true); 
    paint.setFakeBoldText(true); 

    if (shadow == false) { 
     for (GeoPoint point : quakeLocations) { 
      Point myPoint = new Point(); 
      projection.toPixels(point, myPoint); 
      globalPoint = myPoint; 


      if (c != null) { 
       canvas.drawBitmap(flag, myPoint.x - rad, myPoint.y - rad, 
         bitmapPaint); 
       if(mags.isEmpty()){ 
       // do nothing 
       }else{ 
        canvas.drawText(mags.get(0), myPoint.x - rad, myPoint.y - rad, 
          paint); 
        mags.remove(0); 
       } 
      }// end of if stetment 


      }// end of quakeLocations for statment 

     } 
    } 
} 

回答

0

我觉得你的问题是以下行 -

mags.remove(0); 

您绘制的第一次后,您从列表中删除所有的幅度,所以接下来的时间draw被称为mags.isEmpty()将是真实的。看看你的逻辑,你可能需要重做你的循环来遍历你的两个并行数组quakeLocationsmags

喜欢的东西改变for (GeoPoint point : quakeLocations)

final int numQuakes = 0; 
for(int i=0; i < numQuakes; i++) { 
// in here use quakeLocations.get(i) and mags.get(i) 
} 
+0

谢谢,它的工作原理! – AndroidDev

相关问题