Фон
Я хотел ( здесь ), чтобы увидеть, как создать альтернативу AdaptiveIconDrawable
, но изменить его оттягиваемый фон для придания ему формы учитывая Path
.
Проблема
Хорошо, то, что я сделал, работало для Bitmap, но я хотел знать, возможно ли преобразовать данный Drawable непосредственно в Bitmap и даже Drawable, который имеет форму Path
, без создания дополнительных экземпляров Bitmap.
То, что я пробовал
Это текущий код:
fun resizePath(path: Path, width: Float, height: Float): Path {
val bounds = RectF(0f, 0f, width, height)
val resizedPath = Path(path)
val src = RectF()
resizedPath.computeBounds(src, true)
val resizeMatrix = Matrix()
resizeMatrix.setRectToRect(src, bounds, Matrix.ScaleToFit.CENTER)
resizedPath.transform(resizeMatrix)
return resizedPath
}
fun getMaskedBitmap(src: Bitmap, path: Path, resizePathToMatchBitmap: Boolean = true): Bitmap {
val pathToUse = if (resizePathToMatchBitmap) resizePath(path, src.width.toFloat(), src.height.toFloat()) else path
val output = Bitmap.createBitmap(src.width, src.height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(output)
val paint = Paint(Paint.ANTI_ALIAS_FLAG)
paint.color = 0XFF000000.toInt()
canvas.drawPath(pathToUse, paint)
paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
canvas.drawBitmap(src, 0f, 0f, paint)
return output
}
fun getMaskedBitmap(drawable: Drawable, path: Path, resizePathToMatchBitmap: Boolean = true): Bitmap = getMaskedBitmap(drawable.toBitmap(), path, resizePathToMatchBitmap)
Как вы можете см. getMaskedBitmap
преобразует заданный объект в растровое изображение, и внутри него создается еще одно растровое изображение.
Вопросы
- Возможно ли использовать только одно растровое изображение, которое будет быть выходным?
- Возможно ли иметь Drawable в качестве вывода, чтобы он работал даже с VectorDrawable, позволяя вам хорошо масштабировать его?