私の 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 スケーリングの誤ったレンダリングの例:
上記のコード コメントで説明されている問題に加えて、この重いビットマップ変換の代わりに、clipPath などの描画操作で画像/SVG ファイルをマスクできるかどうか疑問に思っています。しかし、もちろん、アンチエイリアスが必要です。
コードはもともと Scala で書かれており、SO 用に大まかに Java に変換されているため、構文エラーは無視してください。