Hallo meine MapView App braucht eine lange Zeit zu laden, also wollte ich einen horizontalen Stil ProgressDialog anzeigen, während es lädt. Wenn ich versuchte, den Dialog in den onCreate/onStart-Methoden anzuzeigen, wurde der Dialog am Ende mit 100% abgeschlossen angezeigt. Ich erkenne nun, dass erst nach den onCreate/onStart-Methoden nichts auf den Bildschirm gezeichnet wird.So zeigen Sie einen ProgressDialog an, nachdem die Hauptansicht gezeichnet wurde. Android
Also, was ich tun möchte, ist die grundlegende Karte anzeigen und führen Sie dann den anspruchsvollen Code nach der Karte wie gezeichnet und so kann ich auch einen ProgressDialog anzeigen. Ist das möglich und wie wäre es?
Vielen Dank im Voraus! =]
EDIT:
Hier ist der Quellcode:
public class GoogleMapsActivity extends MapActivity {
private List<Overlay> mapOverlays;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(false);
mapView.setTraffic(false);
mapOverlays = mapView.getOverlays();
new ProgressTask(this).execute();
}
public void addToMap(ItemizedOverlay<OverlayItem> itemizedOverlay){
mapOverlays.add(itemizedOverlay);
}
}
Und die AsyncTask Klasse
public class ProgressTask extends AsyncTask<String, Void, Boolean> {
private ProgressDialog dialog;
private GoogleMapsActivity activity;
public ProgressTask(GoogleMapsActivity activity) {
this.activity = activity;
dialog = new ProgressDialog(activity);
}
@Override
protected void onPreExecute() {
dialog.setTitle("Loading Pictures");
dialog.setMessage("Loading...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setCancelable(false);
dialog.show();
}
@Override
protected void onPostExecute(final Boolean sucess) {
if (dialog.isShowing()) {
dialog.dismiss();
}
}
@Override
protected Boolean doInBackground(String... args) {
try {
ArrayList<String> list = getImageLocations();
String filePath;
String title;
LayerDrawable drawable;
ImageItemizedOverlay itemizedOverlay;
GeoPoint point;
OverlayItem overlayItem;
int count = 0;
if (list.size() > 0) {
dialog.setMax(list.size());
for (String s : list) {
filePath = s;
point = getImageGeoPoint(s);
if (point != null) {
title = s.substring(filePath.lastIndexOf("/") + 1);
drawable = createLayerDrawable(filePath);
itemizedOverlay = new ImageItemizedOverlay(drawable, activity, filePath);
overlayItem = new OverlayItem(point, title, null);
itemizedOverlay.addOverlay(overlayItem);
activity.addToMap(itemizedOverlay);
}
dialog.incrementProgressBy(1);
}
} else {
if(dialog.isShowing())
dialog.dismiss();
CharSequence text = "No pictures with geolocations stored at DCIM/Camera.";
Toast toast = Toast.makeText(activity, text, Toast.LENGTH_LONG);
toast.show();
}
CharSequence text = count + " pictures didn't have a geolocation.";
Toast toast = Toast.makeText(activity, text, Toast.LENGTH_LONG);
toast.show();
return true;
} catch (Exception e) {
Log.e("tag", "error: " + e.toString(), e);
return false;
}
}
private LayerDrawable createLayerDrawable(String filePath) {
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
Bitmap thumbnail = ThumbnailUtils.extractThumbnail(bitmap, 50, 50);
Drawable picture = new BitmapDrawable(thumbnail);
Drawable pin = activity.getResources()
.getDrawable(R.drawable.backgroundpin);
InsetDrawable inset = new InsetDrawable(picture, 11, 15, 11, 23);
Drawable[] list = { pin, inset };
LayerDrawable layer = new LayerDrawable(list);
return layer;
}
private static GeoPoint getImageGeoPoint(String filename) {
GeoPoint gp = null;
float[] latlong = new float[2];
try {
ExifInterface tag = new ExifInterface(filename);
if (tag.getLatLong(latlong)) {
gp = new GeoPoint((int) (latlong[0] * 1E6),
(int) (latlong[1] * 1E6));
} else {
// TODO error!
}
} catch (FileNotFoundException fnf) {
// TODO error!
fnf.printStackTrace();
} catch (IOException io) {
// TODO error!
io.printStackTrace();
}
return gp;
}
private static ArrayList<String> getImageLocations() {
File directory = new File("mnt/sdcard/DCIM/Camera");
FilenameFilter imageFilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
String lowercaseName = name.toLowerCase();
if (lowercaseName.endsWith(".jpg")) {
return true;
} else {
return false;
}
}
};
File[] files = directory.listFiles(imageFilter);
ArrayList<String> paths = new ArrayList<String>();
if (files != null && files.length > 0)
for (File f : files) {
paths.add(f.getAbsolutePath());
}
return paths;
}
}
Können Sie Ihre Quelle oder zumindest Ihre Implementierung von 'onCreate' posten? –
Sicher Sache !! =] – geekman92