私のアプリでは、何百ものマーカーを追加する必要があります (場合によっては)。このために、デフォルトのマーカーを使用している場合、悪い解決策ではないように思われる「for ループ」を使用しています。AsynkTask
クラスの助けを借りてインターネットからダウンロードしているマーカーごとにカスタム画像を使用する必要がありますLoader()
。しかし、カスタム マーカーを使用すると、「for ループ」が終了するまで UI がフリーズします。
マーカーの追加:
private List<User> mUsers = new ArrayList<User>();
private GoogleMap mMap;
Bitmap bAvatar;
.............
private void drawMarkers() {
mMap.clear();
for (User user : mUsers) {
if (user.getGeohash() != null) {
LatLng pos = gh.decode(user.getGeohash());
if (user.getAvatar() != null) {
try {
bAvatar = new Loader().execute(user.getAvatar()).get();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ExecutionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
mMap.addMarker(new MarkerOptions()
.position(pos)
.title(user.getStatus())
.icon(BitmapDescriptorFactory.fromBitmap(bAvatar)));
} else {
mMap.addMarker(new MarkerOptions()
.position(pos)
.title(user.getStatus())
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
}
}
}
}
画像をダウンロードするための AsyncTask:
public class Loader extends AsyncTask<String, Void, Bitmap> {
Bitmap bitmap;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;
options.inInputShareable = true;
mIcon11 = BitmapFactory.decodeStream(in, null, options);
} catch (Exception e) {
String error = (e.getMessage() == null) ? "doInBackground - Loader"
: e.getMessage();
Log.e("Error", error);
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bitmap = result;
}
}
「for ループ」を、AsynkTask
各ユーザーがList<User>
非同期的にダウンロードされる場所に置き換える必要があると思います。
- 配列の作成
AsynkTask
を手伝ってください。List<User>
AsynkTask
画像のダウンロードのためにList<User>
とを組み合わせる必要がありますか、それとも の中AsynkTask
で使用するのが正しいですか?AsynkTask
AsynkTask
どんな助けでも大歓迎です。前もって感謝します。