13

URL からカスタム アイコンを取得して Google マップに表示できないという問題が発生しました。Google の例では、Google マップに表示されるアイコンのみです。しかし、私が知りたいのは、URLからアイコンを表示することです。

private Marker melbourne = mMap.addMarker(new MarkerOptions()
                            .position(MELBOURNE)
                            .title("Melbourne")
                            .snippet("Population: 4,137,400")
                            .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));

ここに私のコーディングがあります。

            if(c != null){          
                if(c.moveToFirst()){
                    do {
                        googleMap.addMarker(new MarkerOptions()
                        .position(new LatLng(Double.parseDouble(c.getString(2)), Double.parseDouble(c.getString(3))))
                        .title(c.getString(0))
                        .icon(BitmapDescriptorFactory.fromBitmap(bmp))
                        .snippet(c.getString(1)));
                    } while(c.moveToNext());
                }               
            }
4

2 に答える 2

14

ビットマップを次のようにダウンロードできます。

Bitmap bmp = BitmapFactory.decodeStream(myurl.openConnection().getInputStream());

スレッドを使用してビットマップを取得しました

それで

 .icon(BitmapDescriptorFactory.fromBitmap(bmp)));

いただいたコメントからNetworkOnMainThreadException

だから糸を使う。

Thread thread = new Thread(new Runnable(){
@Override
public void run(){
    URL url ;
    try {
        url = new URL("myurl");
        bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
    } catch (Exception e) {
        e.printStackTrace();
    }
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            source = mMap.addMarker(new MarkerOptions()
                    .position(sc)
                    .title("MyHome")
                    .snippet("Bangalore")
                    .icon(BitmapDescriptorFactory.fromResource(bmp)));
        }
    });
}
});
thread.start();

バックグラウンド スレッドから ui を更新することはできません。使用してrunOnUiThreadください。

非同期タスクの使用

asyncn タスクをアクティビティの内部クラスにします。Bitmap をクラス変数として宣言します。

 class TheTask extends AsyncTask <Void,Void,Void>
 {
@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();

}
@Override
protected Void doInBackground(Void... params) {
    URL url ;
    try {
    url = new URL("myurl");
    bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
    } catch (Exception e) {
      e.printStackTrace();
         }
    return null;
}
@Override
protected void onPostExecute(Void result) {

super.onPostExecute(result);
    source = mMap.addMarker(new MarkerOptions()
    .position(sc)
    .title("MyHome")
    .snippet("Bangalore")                                                                                     
    .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));                                       
    }
}
于 2013-07-06T06:18:09.413 に答える
6

Ionを使用して画像を読み込みました。とても良いライブラリです。

URLからマーカーアイコンを設定するのはとても簡単です。

try {
        Bitmap bmImg = Ion.with(context)
                .load("http://example.com").asBitmap().get();

        mMap.addMarker(new MarkerOptions().position(latlng)
                .icon(BitmapDescriptorFactory.fromBitmap(bmImg)));

    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

この助けを願っています

于 2014-07-01T11:17:26.307 に答える