В моем ImageView onDraw
я изо всех сил пытаюсь преобразовать объект Drawable в растровое изображение (с учетом масштабирования). Я загружаю файл SVG как PictureDrawable. Затем я пытаюсь применить закругленные углы к изображению с помощью BitmapShader. Для этого мне нужно преобразовать Drawable в Bitmap. Это в основном работает, но я не понимаю процедуру масштабирования.
Bitmap bitmap = Bitmap.createBitmap(
picture.getIntrinsicWidth(),
picture.getIntrinsicHeight(),
Bitmap.Config.ARGB_8888
)
Canvas canvas = new Canvas( bitmap )
// Scaling the Canvas appears to work ...
canvas.concat( getImageMatrix() )
canvas.drawPicture(
picture.getPicture,
// ... however this will not fill the viewport, as the getWidth and getHeight
// values do not reflect the scaling
new RectF( 0, 0, canvas.getWidth(), canvas.getHeight() )
)
paint.setShader( new BitmapShader( bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP ) )
canvas.drawRoundRect(
new RectF( 0, 0, bitmap.getWidth(), bitmap.getHeight() ),
radius,
radius,
paint
)
Пример ошибочного рендеринга для масштабирования centerCrop:
Помимо проблемы, описанной в комментариях к коду выше, мне интересно, можно ли замаскировать файл Picture/SVG с помощью операций рисования, таких как clipPath, вместо этого тяжелого преобразования Bitmap. Но это должно быть сглажено, конечно.
Код изначально был написан на Scala и частично переведен на Java для SO, поэтому не обращайте внимания на любые синтаксические ошибки