android – 如何使用Picasso为Google Marker自定义图标创建语音泡泡边框?

如何使用Picasso和Google Marker Custom Icon来实现此功能

我知道如何将Picasso用于图像,但我不知道如何在底部和边框上添加标记图标”.

Picasso.with(mContext)
            .load(url)
            .resize(250,250)
            .centerInside()
            .into(new Target() {
                @Override
                public void onBitmapLoaded(Bitmap bitmap,Picasso.LoadedFrom from) {
                    Marker driver_marker = mMap.addMarker(new MarkerOptions()
                            .position(new LatLng(Double.parseDouble(lat),Double.parseDouble(lng)))
                            .icon(BitmapDescriptorFactory.fromBitmap(bitmap))
                            .title(name)
                            .snippet(address)
                    );


                    @Override
                    public void onBitmapFailed (Drawable errorDrawable){
                    }

                    @Override
                    public void onPrepareLoad (Drawable placeHolderDrawable){
                    }
                });
            }

我在onBitmapLoaded中添加了这个:

Paint paint = new Paint();
    paint.setColor(Color.YELLOW);
    paint.setstrokeWidth(10);
    paint.setShadowLayer(5,1,Color.RED);

    Canvas canvas = new Canvas(bitmap);
    canvas.drawLine(0,canvas.getWidth(),paint);
    canvas.drawLine(0,canvas.getHeight(),paint);
    canvas.drawLine(canvas.getWidth(),paint);

这似乎增加了边框,但我如何用Canvas添加倒金字塔?谢谢,在那之后,我已经完成了! :d

解决方法

这是我工作的转型课程.它缺少角落半径和任何渐变,但底部有倒金字塔,它应该是一个很好的起点.

这是转换类:

import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Shader;

public class BubbleTransformation implements com.squareup.picasso.Transformation {
    private static final int outerMargin = 40;
    private final int margin;  // dp

    // margin is the board in dp
    public BubbleTransformation(final int margin) {
        this.margin = margin;
    }

    @Override
    public Bitmap transform(final Bitmap source) {
        Bitmap output = Bitmap.createBitmap(source.getWidth(),source.getHeight(),Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        Paint paintBorder = new Paint();
        paintBorder.setColor(Color.CYAN);
        paintBorder.setstrokeWidth(margin);
        canvas.drawRoundRect(new RectF(outerMargin,outerMargin,source.getWidth() - outerMargin,source.getHeight() - outerMargin),paintBorder);

        Paint trianglePaint = new Paint(Paint.ANTI_ALIAS_FLAG);

        trianglePaint.setstrokeWidth(2);
        trianglePaint.setColor(Color.CYAN);
        trianglePaint.setStyle(Paint.Style.FILL_AND_stroke);
        trianglePaint.setAntiAlias(true);

        Path triangle = new Path();
        triangle.setFillType(Path.FillType.EVEN_ODD);
        triangle.moveto(outerMargin,source.getHeight() / 2);
        triangle.lineto(source.getWidth()/2,source.getHeight());
        triangle.lineto(source.getWidth()-outerMargin,source.getHeight()/2);
        triangle.close();

        canvas.drawPath(triangle,trianglePaint);

        final Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setShader(new BitmapShader(source,Shader.TileMode.CLAMP,Shader.TileMode.CLAMP));
        canvas.drawRoundRect(new RectF(margin+outerMargin,margin+outerMargin,source.getWidth() - (margin + outerMargin),source.getHeight() - (margin + outerMargin)),paint);

        if (source != output) {
            source.recycle();
        }

        return output;
    }

    @Override
    public String key() {
        return "rounded";
    }
}

对毕加索的呼吁:

Picasso.with(getActivity())
            .load(user_photo_url)
            .resize(250,250)
            .centerCrop()
            .transform(new BubbleTransformation(20))
            .into(mTarget);

目标:

Target mTarget = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap,Picasso.LoadedFrom from) {
        Marker driver_marker = mMap.addMarker(new MarkerOptions()
                        .position(latLng)
                        .icon(BitmapDescriptorFactory.fromBitmap(bitmap))
                        .title("test")
                        .snippet("test address")
        );
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
        Log.d("picasso","onBitmapFailed");
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {

    }
};

结果:

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...