如何使用Picasso为Marker添加图标?

WeV*_*Vie 7 android google-maps picasso

我想使用Picasso来检索Bitmap图像以用作标记图标,但我不知道该怎么做.如果我使用Picasso将图像插入图像视图,我知道我可以使用:

 Picasso.with(MainActivity.this).load(URL).into(photo_imageview);
Run Code Online (Sandbox Code Playgroud)

当然,如果我把它传递给它,这将不起作用 .icon()

有没有一种简单的方法来实现这一目标?

感谢有人看看这个!

iag*_*een 28

Picasso提供了一个通用Target界面,您可以使用它来实现自己的图像目标.具体来说,您需要覆盖onBitmapLoaded以填充标记.

下面给出了一个基本的实现.

public class PicassoMarker implements Target {
    Marker mMarker;

    PicassoMarker(Marker marker) {
        mMarker = marker;
    }

    @Override
    public int hashCode() {
        return mMarker.hashCode();
    }

    @Override
    public boolean equals(Object o) {
        if(o instanceof PicassoMarker) {
            Marker marker = ((PicassoMarker) o).mMarker;
            return mMarker.equals(marker);
        } else {
            return false;
        }
    }

    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        mMarker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap));
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {

    }
}
Run Code Online (Sandbox Code Playgroud)

你会像这样使用它 -

marker = new PicassoMarker(myMarker);
Picasso.with(MainActivity.this).load(URL).into(marker);
Run Code Online (Sandbox Code Playgroud)

注意 Picasso只保留一周的Target传递给into.因此,marker引用需要存在,直到加载映像以避免垃圾回收器清理回调.