Je développe une application de dessin et j'ai besoin de mettre en place un outil de gomme pour effacer les zones spéciales des images. Eraser doit effacer une partie du cercle de manière inégale. Cela signifie que seul le centre du cercle devrait être effacé complètement et les bords du cercle devraient être effacés partiellement, avec alpha.Effacer la zone de canevas avec la forme spéciale du bitmap
Pour ce comportement, j'ai créé l'image qui representes la figure de gomme à effacer
Ensuite, pour effacer une zone de vue, je dessine la figure de la gomme au-dessus une image comme ceci:
private val picture: Bitmap
private val bgPaint = Paint()
private var eraser: Bitmap
private val eraserPaint: Paint = Paint().apply {
val mode: PorterDuff.Mode = PorterDuff.Mode.SRC_OUT
xfermode = PorterDuffXfermode(mode)
color = Color.TRANSPARENT
alpha = 0
}
init {
val options = BitmapFactory.Options()
options.inMutable = true
picture = BitmapFactory.decodeResource(resources, R.drawable.petushara, options)
eraser = BitmapFactory.decodeResource(resources, R.drawable.eraser, options)
setLayerType(View.LAYER_TYPE_SOFTWARE, bgPaint)
}
override fun draw(canvas: Canvas) {
super.draw(canvas)
canvas.drawBitmap(picture, 0f, 0f, bgPaint)
canvas.drawBitmap(eraser, 100f, 300f, eraserPaint)
}
Ceci est la totalité de ma classe de vue, à l'exclusion des constructeurs. Je pense que la zone de l'image sera effacée par la figure de gomme à effacer, mais il permet d'effacer par la figure de la place comme ceci:
En fait, ce que je ne la meilleure solution. Si vous essayez d'effacer la zone qui a déjà été effacée, cette zone sera colorisée par la couleur d'effacement d'image. Noir dans notre cas –