How to rotate drawOval() in android canvas on touch and drag it?

Viewed 20

I'm able to draw oval on canvas and figured it out touch on 4 co-ordinates on it (left, right, top bottom). I need to rotate whole oval on touch of respective point and drag on canvas.

Current code:

override fun draw(canvas: Canvas, paint: Paint) {
    canvas.drawOval(rectF, paint)
}

override fun onTouchEvent(event: MotionEvent): Boolean {
    // Get current coordinates
    currentPoint = PointF(event.x, event.y)
    when (event.action) {
        MotionEvent.ACTION_DOWN -> actionDown(currentPoint)
        MotionEvent.ACTION_MOVE -> actionMove(currentPoint)
        MotionEvent.ACTION_UP -> actionUp(currentPoint)
    }
    invalidate() // Re-execute onDraw
    return true
}

override fun actionDown(currentPoint: PointF) {
    ellipseCenterPoint = PointF(rectF.centerX(), rectF.centerY())
    ellipseLeftPoint = PointF(startPoint.x, ellipseCenterPoint.y)
    ellipseRightPoint = PointF(endPoint.x, ellipseCenterPoint.y)
    ellipseTopPoint = PointF(ellipseCenterPoint.x, startPoint.y)
    ellipseBottomPoint = PointF(ellipseCenterPoint.x, endPoint.y)

    Timber.d("onActionDown: $currentPoint $startPoint, $endPoint, $ellipseCenterPoint, $ellipseLeftPoint")
    when {
        isPointInsideCircle(currentPoint, ellipseLeftPoint, circleRadius) -> {
            touchRegion = CursorTouchRegion.LEFT
        }
        isPointInsideCircle(currentPoint, ellipseRightPoint, circleRadius) -> {
            touchRegion = CursorTouchRegion.RIGHT
        }
        isPointInsideCircle(currentPoint, ellipseTopPoint, circleRadius) -> {
            touchRegion = CursorTouchRegion.TOP
        }
        isPointInsideCircle(currentPoint, ellipseBottomPoint, circleRadius) -> {
            touchRegion = CursorTouchRegion.BOTTOM
        }
        else -> {
            super.actionDown(currentPoint)
            touchRegion = CursorTouchRegion.NONE
        }
    }
0 Answers
Related