如何使用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);
解决方法
这是我工作的转型课程.它缺少角落半径和任何渐变,但底部有倒金字塔,它应该是一个很好的起点.
这是转换类:
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) { } };
结果: