在Android地图v2中的标记的圆形图标

时间:2014-09-09 01:45:27

标签: android google-maps google-maps-markers google-maps-android-api-2

我在我的Android应用中实现了谷歌地图。我有两个与标记有关的问题。

问题1:如何获取圆形图像标记?即我想在地图标记中获得roud图像图标而不是方形图标图标?

我从特定网址获取lat,long和profiepic链接的列表,并使用Async加载它们。在Post执行我有     实现了for循环

    protected void onPostExecute(String file_url)
    {
        for (int i = 0; i < nameList.size(); i++)
        {
            userName = nameList.get(i).getName();
            lati = nameList.get(i).getLati();
            longi = nameList.get(i).getLongi();
            photoUrl = nameList.get(i).getImage();

            gotoLocation(Double.parseDouble(lati), Double.parseDouble(longi), userName, photoUrl, ZOOMVALUE);
        }
    }

我正在使用毕加索库将图像加载到标记:

    private void gotoLocation(double lat, double lng, String name, String url, float zoom)
    {
       final String uname = name; 
       curlat = lat;
       curlong = lng;

      Picasso.with(getActivity()).load(url).resize(100, 100).into(new Target() 
      { 
        @Override
        public void onBitmapFailed(Drawable arg0) 
        {
            markerOptions = new MarkerOptions().position(new LatLng(curlat, curlong)).icon(BitmapDescriptorFactory.fromResource(R.drawable.profilepic)).title(uname);
            markerforfriends = googleMap.addMarker(markerOptions);          
        }

        @Override
        public void onBitmapLoaded(Bitmap b, LoadedFrom arg1) 
        {

            bitmapMarker = BitmapDescriptorFactory.fromBitmap(b);

            if(b != null)
            {
                markerOptions = new MarkerOptions().position(new LatLng(curlat, curlong)).icon(bitmapMarker).title(uname);
            }
            else
            {
                markerOptions = new MarkerOptions().position(new LatLng(curlat, curlong)).icon(BitmapDescriptorFactory.fromResource(R.drawable.profilepic)).snippet(uname);
            }

            markerforfriends = googleMap.addMarker(markerOptions);                    

        }

        @Override
        public void onPrepareLoad(Drawable arg0) 
        {

        }
      });

    }

我尝试了以下内容:

    CircleOptions circle=new CircleOptions();
    circle.center(ll).fillColor(Color.LTGRAY).radius(1);
    googleMap.addCircle(circle);

这会圈出当前位置,但不是图像?

问题2:以上标记始终不会弹出(不稳定)?如果我引用地图它会正确显示?这可能有什么问题?是因为我使用piccasso库加载它们吗?是否有不同的方法将图像从URL加载到标记?

3 个答案:

答案 0 :(得分:0)

这是一个问题。见这里:https://github.com/square/picasso/issues/308

根据杰克沃顿的说法,不要将Target声明为匿名,因为它会收集垃圾。例如,在您的活动中将其声明为私有。看看是否有效。

在单独的文件中:

public class DummyTarget implements Target
{
    public String uname;
    //etc....

    @Override
    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom from) {
     // you codes....      

    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
     // your codes....

    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {

    }
}

在某处,声明它

private target = new DummyTarget();

在毕加索的电话中:

private void gotoLocation(double lat, double lng, String name, String url, float zoom)
    {
       final String uname = name; 
       curlat = lat;
       curlong = lng;

       // set dummy target
       target.uname = uname;
       // etc...

      Picasso.with(getActivity()).load(url).resize(100, 100).into(target);

答案 1 :(得分:0)

你也可以加载到“this”

Picasso.with(getActivity()).load(url).resize(100, 100).into(this);

然后让当前类实现Target

    public class YourClass implements Target {

        private ArrayList<BitMap> bitMaps;

    private void gotoLocation(double lat, double lng, String name, String url, float zoom)  {
       final String uname = name; 
       curlat = lat;
       curlong = lng;
        Picasso.with(getActivity()).load(url).resize(100, 100).into(this);
    }

        @Override
        public void onBitmapFailed(Drawable arg0) {

        }

        @Override
        public void onBitmapLoaded(Bitmap bitmap, LoadedFrom loadedFrom) {
            bitMaps.add(bitmap);

        }

        @Override
        public void onPrepareLoad(Drawable arg0) {


        }

    }

答案 2 :(得分:0)

解决问题1部分.. 由于我正在使用毕加索,这对我来说非常有用,可以画一个圆圈图标。

Transformation transformation = new RoundedTransformationBuilder()
.borderColor(Color.WHITE)
.borderWidthDp(3)
.cornerRadiusDp(30)
.oval(false)
.build();

使用RoundedTransformationBuilder库!

感谢https://github.com/vinc3m1/RoundedImageView的创建者!

如果他们想要与MY QUESTION 1相似的话,这对其他人有用。