在手指下画一个圆圈



您好!我遇到了这样一个问题,我需要在手指的触摸下画一个圆圈。

我尝试使用以下代码:

private fun pressFinger() {
mFirst.setOnTouchListener(View.OnTouchListener { v, event ->
val x = event.x
val y = event.y

when (event.action) {
MotionEvent.ACTION_DOWN -> {
drawCircle(x, y)
}
}
return@OnTouchListener true
})
}
fun drawCircle(x: Float, y: Float) {
val width: Int = x.toInt()
val height: Int = y.toInt()
val bitmap = (mFirst.getDrawable() as BitmapDrawable).bitmap
val workingBitmap: Bitmap = Bitmap.createBitmap(bitmap)
val mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true)
val canvasBitmap = Canvas(mutableBitmap)
val paint = Paint(Paint.ANTI_ALIAS_FLAG)
paint.style = Paint.Style.FILL
paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR)
canvasBitmap.drawCircle(width.toFloat(), height.toFloat(), 180F, paint)
mFirst.setImageBitmap(mutableBitmap)
drawUtils.draw()
}

问题是圆不是画在手指下面,而是画在侧面。

我还想注意的是,放置在ImageView内的图像具有更大的尺寸;cropCenter";。事实证明,我需要准确地获得手指在ImageView中放置的图像上的位置,而不仅仅是在屏幕上。

如果有人知道这个问题的正确答案,我将不胜感激。

这是非常糟糕的代码。为什么要编辑视图中的背景图像?更简单的方法是将坐标保存在onTouch功能中,然后使视图无效。然后在视图的onDraw中,在该位置绘制一个圆。这样可以避免所有的缩放问题,而且不必制作两个副本!!!位图的效率非常低。

canvasBitmap.drawCircle(width.toFloat((-180F/2,height.toFloat((-180F/2,180F,paint(

试试看。

最新更新