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
}
}