来自URL的Android google mapv2图标 [英] Android google mapv2 icon from URL

查看:127
本文介绍了来自URL的Android google mapv2图标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

现在遇到了问题,我无法从URL中获取自定义图标并将其显示在Google地图中。关于谷歌的例子,只有图标才能显示在谷歌地图上。但是我想知道的是从URL显示图标。

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

以下是我的编码。

<$ p如果(c!= null){
if(c.moveToFirst()){
do {
googleMap.addMarker(new MarkerOptions()$ b)$ p> $ b .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());



$ div $解析方案

你可以下载Bitmap作为

 位图bmp = BitmapFactory.decodeStream(myurl.openConnection()。getInputStream()); 

使用线程获取位图

然后

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

从您的评论中得到 NetworkOnMainThreadException

所以使用一个线程。

 线程线程= 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成为您活动的内在阶层。声明位图为类变量。

  class TheTask扩展AsyncTask< Void,Void,Void> 
{
@Override
protected void onPreExecute(){
// TODO自动生成的方法存根
super.onPreExecute();


@Override
protected void doInBackground(Void ... params){
URL url;
尝试{
url =新网址(myurl);
bmp = BitmapFactory.decodeStream(url.openConnection()。getInputStream());
} catch(Exception e){
e.printStackTrace();
}
返回null;

@Override
保护无效onPostExecute(Void结果){

super.onPostExecute(result);
source = mMap.addMarker(new MarkerOptions()
.position(sc)
.title(MyHome)
.snippet(Bangalore)
。图标(BitmapDescriptorFactory.fromResource(R.drawable.pin)));
}
}


Now got problem that I cannot fetch and display custom icon into Google Maps from URL. Regarding Google's example, only icon to be displayed into Google map. But what I want to know is to display icon from URL.

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

and here is my coding.

            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());
                }               
            }

解决方案

You can download Bitmap as

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

Used a thread to get the bitmap

Then

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

From your comments you get NetworkOnMainThreadException

So use a thread.

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();

You can't update ui from a background thread. use runOnUiThread.

Using asycntask

Make your asycn taks an inner class of your activity. Declare Bitmap as a class variable.

 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)));                                       
    }
}

这篇关于来自URL的Android google mapv2图标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆