Пользовательский значок оттенка, используемый в API Карт Google - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть представление Google Maps в приложении Android, и я создал собственный значок маркера (из svg) следующим образом:

Использование

mMap.addMarker {
    position(LatLng(mLastLocation.latitude, mLastLocation.longitude))
    title("Path marker")
    icon(bitmapDescriptorFromVector(this@DrivingActivity, R.drawable.ic_marker))
    anchor(0.5F,0.5F)
    flat(true)
}

Метод

private fun bitmapDescriptorFromVector(context: Context, vectorResId: Int): BitmapDescriptor? {
    return ContextCompat.getDrawable(context, vectorResId)?.run {
        setBounds(0, 0, 44, 36)
        val bitmap = Bitmap.createBitmap(44, 36, Bitmap.Config.ARGB_8888)
        draw(Canvas(bitmap))
        BitmapDescriptorFactory.fromBitmap(bitmap)
    }
}

Как добавить оттенок, как вы делаете в ImageViews? Цель состоит в том, чтобы повторно использовать один и тот же ресурс изображения для разных целей - просто цвет будет другим.

1 Ответ

0 голосов
/ 19 апреля 2020

Я нашел много вдохновения в этом посте и получил это решение:

Я создал этот метод:

private fun vectorToBitmap(@DrawableRes id: Int, @ColorInt color: Int, width: Int, height: Int): BitmapDescriptor? {
    val vectorDrawable: Drawable? = ResourcesCompat.getDrawable(resources, id, null)

    if(vectorDrawable != null) {
        val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)

        val canvas = Canvas(bitmap)
        vectorDrawable.setBounds(0, 0, canvas.width, canvas.height)
        DrawableCompat.setTint(vectorDrawable, color)
        vectorDrawable.setTintBlendMode(BlendMode.DARKEN)
        vectorDrawable.draw(canvas)

        return BitmapDescriptorFactory.fromBitmap(bitmap)
    }

    return null
}

Он используется так:

mMap.addMarker {
    position(LatLng(mLastLocation.latitude, mLastLocation.longitude))
    title("Path marker")
    icon(vectorToBitmap(R.drawable.ic_bale, Color.parseColor("#FFCA22"), 44, 33))
    //icon(bitmapDescriptorFromVector(this@DrivingActivity, R.drawable.ic_bale))
    anchor(0.5F,0.5F)
    flat(true)
}

Режим затемнения смешивает перекрашивание белых областей, оставляя черные области вне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...