Custom marker in google maps in android with vector asset icon

前端 未结 9 1208
小鲜肉
小鲜肉 2020-12-02 09:50

How can we achieve a map marker icon with vector asset file, the way google shows it like this, programatically:

Update:

m         


        
9条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-02 10:25

    For a Kotlin user.Please check below code.As I ddid in Fragment class.

    class MapPinFragment : Fragment() {
    
        private lateinit var googleMap1: GoogleMap
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
        }
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                                  savedInstanceState: Bundle?): View? {
            return inflater.inflate(R.layout.fragment_map_pin, container, false)
        }
    
        override fun onActivityCreated(savedInstanceState: Bundle?) {
            super.onActivityCreated(savedInstanceState)
            mapView.onCreate(savedInstanceState)
            mapView.onResume()
    
        }
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
    
    
            mapView.getMapAsync { googleMap ->
                googleMap1 = googleMap as GoogleMap
                addCustomMarker()
            }
    
        }
    
        private fun addCustomMarker() {
            Log.d("addCustomMarker", "addCustomMarker()")
            if (googleMap1 == null) {
                return
            }
            // adding a marker on map with image from  drawable
            googleMap1.addMarker(
                MarkerOptions()
                    .position(LatLng(23.0225 , 72.5714))
                    .icon(BitmapDescriptorFactory.fromBitmap(getMarkerBitmapFromView()))
            )
        }
    
        override fun onDestroy() {
            super.onDestroy()
            if (mapView != null)
                mapView.onDestroy()
        }
        override fun onLowMemory() {
            super.onLowMemory()
            mapView.onLowMemory()
        }
    
        private fun getMarkerBitmapFromView(): Bitmap? {
            val customMarkerView: View? = layoutInflater.inflate(R.layout.view_custom_marker, null)
    //        val markerImageView: ImageView =
    //            customMarkerView.findViewById(R.id.profile_image) as ImageView
            customMarkerView?.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED );
            customMarkerView?.layout(0, 0, customMarkerView.measuredWidth, customMarkerView.measuredHeight);
            customMarkerView?.buildDrawingCache();
            val returnedBitmap = Bitmap.createBitmap(
                customMarkerView!!.measuredWidth, customMarkerView.measuredHeight,
                Bitmap.Config.ARGB_8888
            )
            val canvas = Canvas(returnedBitmap)
            canvas.drawColor(Color.WHITE, PorterDuff.Mode.SRC_IN)
            val drawable = customMarkerView.background
    
            drawable?.draw(canvas);
            customMarkerView.draw(canvas);
            return returnedBitmap;
    
        }
    
    
    
    
    }
    

提交回复
热议问题