现在出现了一个问题,我无法通过网址将自定义图标显示到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());
}
}
答案 0 :(得分:11)
您可以将Bitmap下载为
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
。
使用asycntask
让你的asycn成为你活动的内在阶层。将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)));
}
}
答案 1 :(得分: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();
}
希望这个帮助