【问题标题】:Draw circle under finger android canvas在手指android画布下画圆圈
【发布时间】:2021-05-23 23:36:18
【问题描述】:

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

我尝试使用以下代码:

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 中的图像尺寸较大,我使用 scaleType = "cropCenter"。 事实证明,我需要在放置在 ImageView 中的图像上准确地获取手指的位置,而不仅仅是在屏幕上。

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

【问题讨论】:

    标签: android canvas bitmap position draw


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      canvasBitmap.drawCircle(width.toFloat() - 180F / 2, height.toFloat() - 180F / 2, 180F, 绘画)

      试一试。

      【讨论】:

      • 应该不需要。根据绘制圆的文档,坐标是圆的中心。如果它是右下角,这将是正确的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多