如何在Compose版Google Maps中修改AdvancedMarker图标?
修改Android Maps Compose中AdvancedMarker的自定义图标
谷歌官方推荐在Android Maps Compose中使用AdvancedMarker组件添加地图标记,但官方文档未说明如何替换为drawable文件夹中的自定义图标,以下是具体实现步骤:
- 确保目标图标已放入项目的
drawable资源目录(例如命名为ic_custom_marker.png) - 通过
BitmapDescriptorFactory.fromResource()将Drawable资源转换为BitmapDescriptor对象,传递给AdvancedMarker的icon参数
完整代码示例:
import com.google.android.gms.maps.model.BitmapDescriptorFactory import com.google.maps.android.compose.GoogleMap import com.google.maps.android.compose.AdvancedMarker import com.google.maps.android.compose.MarkerState import com.google.android.gms.maps.model.LatLng // ... GoogleMap( googleMapOptionsFactory = { GoogleMapOptions().mapId("DEMO_MAP_ID") }, // 其他配置参数 ) { AdvancedMarker( state = MarkerState(position = LatLng(-34, 151)), title = "Marker in Sydney", icon = BitmapDescriptorFactory.fromResource(R.drawable.ic_custom_marker) ) AdvancedMarker( state = MarkerState(position = LatLng(35.66, 139.6)), title = "Marker in Tokyo", icon = BitmapDescriptorFactory.fromResource(R.drawable.ic_custom_marker) ) }
如果需要对图标做缩放、tint等自定义处理,可以先将Drawable转为Bitmap再调整,示例如下:
import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import com.google.android.gms.maps.model.BitmapDescriptor import com.google.android.gms.maps.model.BitmapDescriptorFactory fun getCustomMarkerIcon(drawable: Drawable, size: Int): BitmapDescriptor { val bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) drawable.setBounds(0, 0, canvas.width, canvas.height) drawable.draw(canvas) return BitmapDescriptorFactory.fromBitmap(bitmap) } // 使用时 AdvancedMarker( state = MarkerState(position = LatLng(-34, 151)), title = "Marker in Sydney", icon = getCustomMarkerIcon(resources.getDrawable(R.drawable.ic_custom_marker, null), 100) )
内容的提问来源于stack exchange,提问作者NullPointerException
相关产品推荐
相关产品推荐

