如何使用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, 0, 1, Color.RED); Canvas canvas = new Canvas(bitmap); canvas.drawLine(0, 0, canvas.getWidth(), 0, paint); canvas.drawLine(0, 0, 0, canvas.getHeight(), paint); canvas.drawLine(0, canvas.getHeight(), canvas.getWidth(), canvas.getHeight(), paint); canvas.drawLine(canvas.getWidth(), 0, canvas.getWidth(), canvas.getHeight(), 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), 0, 0, 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)), 0, 0, 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) { } };
结果: