如何解决更改除路径之外的画布颜色
我有一个扩展 ImageView
的自定义视图。设置图像后,我首先突出显示图像上的某些内容。当我按下按钮时,我想让图像变黑,除了路径的那部分。有什么方法可以实现吗?
我最初尝试的是用第二个画布创建第二个位图,但现在显示它,同时在主画布上绘图时也在黑色画布上用透明颜料绘制,最后一步将它们合并在一起。我无法在黑色画布上实现透明绘图。
@SuppressLint("AppCompatCustomView")
class BlackImageView @JvmOverloads constructor(
context: Context,attrs: AttributeSet? = null,defStyleAttr: Int = 0
) : ImageView(context,attrs,defStyleAttr) {
var path: Path = Path()
var transparentPath: Path = Path()
var paint: Paint = Paint().apply {
isAntiAlias = true
isDither = true
strokeWidth = 25f
color = ResourcesCompat.getColor(resources,R.color.highlight,null)
style = Paint.Style.STROKE
strokeJoin = Paint.Join.ROUND
strokeCap = Paint.Cap.ROUND
}
var transparentPaint: Paint = Paint().apply {
isAntiAlias = true
isDither = true
strokeWidth = 25f
color = Color.TRANSPARENT
xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR)
style = Paint.Style.STROKE
strokeJoin = Paint.Join.ROUND
strokeCap = Paint.Cap.ROUND
}
private lateinit var blackBitmap: Bitmap
private lateinit var extraCanvas: Canvas
override fun onSizeChanged(w: Int,h: Int,oldw: Int,oldh: Int) {
super.onSizeChanged(w,h,oldw,oldh)
blackBitmap = Bitmap.createBitmap(w,Bitmap.Config.ARGB_8888)
extraCanvas = Canvas(blackBitmap)
extraCanvas.drawColor(Color.BLACK)
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
event?.let {
when (it.action) {
MotionEvent.ACTION_DOWN -> {
path.moveTo(event.x,event.y)
transparentPath.moveTo(event.x,event.y)
}
MotionEvent.ACTION_MOVE -> {
path.lineTo(event.x,event.y)
transparentPath.lineTo(event.x,event.y)
invalidate()
}
MotionEvent.ACTION_UP -> {
}
else -> {
invalidate()
return true
}
}
}
invalidate()
return true
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
// canvas?.drawBitmap(blackBitmap,0f,null)
// canvas?.drawPath(transparentPath,transparentPaint)
canvas?.drawPath(path,paint)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。