Поскольку объект Path не имеет функции contains, но у региона есть функция, и мы можем построить регион из пути, я попробовал это .
Но регион, похоже, не соответствует моим ожидаемым границам, поэтому я написал небольшой тест, чтобы поиграться.
Код: Выделить всё
fun boundsTest() {
val clipRegion = Region(0, 0, 100, 100)
val pathRectF = RectF()
// Create a path describing a triangle
val path = Path()
path.moveTo(0F,0F)
path.lineTo(5f, 5f)
path.lineTo(5f, 0f)
path.lineTo(0f, 0f)
path.close()
// Compute the exact bounds of the path
path.computeBounds(pathRectF, true)
val pathBoundingBox = pathRectF.toRect()
Log.i("MyLog", "boundsTest: pathBoundingBox: $pathBoundingBox")
// Create a region from the bounding box of the path
val pathBoundingRegion = Region(pathBoundingBox)
Log.i("MyLog", "boundsTest: pathBoundingBoxRegion: $pathBoundingRegion")
Log.i("MyLog", "boundsTest: pathBoundingBoxRegion.bounds: ${pathBoundingRegion.bounds}")
pathBoundingRegion.setPath(path, clipRegion)
val bounds = pathBoundingRegion.bounds
Log.i("MyLog", "boundsTest: $bounds")
assertTrue { bounds.left == 0 }
}`
Затем я создаю выберите из него регион и получите границы региона, поэтому убедитесь, что он по-прежнему имеет ту же ограничивающую рамку, но журналы выглядят так.
boundsTest: pathBoundingBox: Rect(0, 0 - 5, 5)
boundsTest: pathBoundingBoxRegion: SkRegion((0,0,5,5))
boundsTest: pathBoundingBoxRegion.bounds: Rect(0, 0 - 5, 5)
boundsTest: Rect(1, 0 - 5, 4)
Как видите, все выглядит нормально, но последний лог кажется странным. Слева — 1 вместо 0, а снизу — 4 вместо 5, что приводит к ширине и высоте 4 вместо 5.
Я пытался поэкспериментировать с некоторыми вещами, например с clipRegion р>
Код: Выделить всё
val clipRegion = Region(-1, -1, 100, 100)
Код: Выделить всё
val clipRegion = Region(0, 0, Int.MAX_VALUE - 1, Int.MAX_VALUE - 1)
или другие способы установки пути
Код: Выделить всё
pathBoundingRegion.setPath(path, Region(pathBoundingBox.left, pathBoundingBox.top, pathBoundingBox.right, pathBoundingBox.bottom))
Код: Выделить всё
pathBoundingRegion.setPath(path, Region(pathRectF.left.toInt(), pathRectF.top.toInt(), pathRectF.right.toInt(), pathRectF.bottom.toInt()))
Я знаю, что есть другие способы решения моей первоначальной проблемы, и я также благодарен за каждый Альтернативный подход, который у вас может быть, я был бы очень признателен, если бы кто-нибудь помог мне решить этот подход, поскольку я чувствую, что что-то упускаю.
Подробнее здесь: https://stackoverflow.com/questions/789 ... s-expected