最佳答案
我通过引用 Telegram 应用程序来完成此操作 Telegram App
在谷歌地图中添加标记
GoogleMap mMap;
Marker marker;
LatLng latLng = new LatLng(Double.parseDouble(lat), Double.parseDouble(long));
MarkerOptions options = new MarkerOptions().position(latLng);
Bitmap bitmap = createUserBitmap();
if(bitmap!=null){
options.title("Ketan Ramani");
options.icon(BitmapDescriptorFactory.fromBitmap(bitmap));
options.anchor(0.5f, 0.907f);
marker = mMap.addMarker(options);
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
}
创建位图的函数
private Bitmap createUserBitmap() {
Bitmap result = null;
try {
result = Bitmap.createBitmap(dp(62), dp(76), Bitmap.Config.ARGB_8888);
result.eraseColor(Color.TRANSPARENT);
Canvas canvas = new Canvas(result);
Drawable drawable = getResources().getDrawable(R.drawable.livepin);
drawable.setBounds(0, 0, dp(62), dp(76));
drawable.draw(canvas);
Paint roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
RectF bitmapRect = new RectF();
canvas.save();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.avatar);
//Bitmap bitmap = BitmapFactory.decodeFile(path.toString()); /*generate bitmap here if your image comes from any url*/
if (bitmap != null) {
BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Matrix matrix = new Matrix();
float scale = dp(52) / (float) bitmap.getWidth();
matrix.postTranslate(dp(5), dp(5));
matrix.postScale(scale, scale);
roundPaint.setShader(shader);
shader.setLocalMatrix(matrix);
bitmapRect.set(dp(5), dp(5), dp(52 + 5), dp(52 + 5));
canvas.drawRoundRect(bitmapRect, dp(26), dp(26), roundPaint);
}
canvas.restore();
try {
canvas.setBitmap(null);
} catch (Exception e) {}
} catch (Throwable t) {
t.printStackTrace();
}
return result;
}
根据设备密度计算dp
public int dp(float value) {
if (value == 0) {
return 0;
}
return (int) Math.ceil(getResources().getDisplayMetrics().density * value);
}
关于android - 图钉内带有用户图像的自定义标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39315219/