Вот как создать область обрезки в форме круга:
Path path = new Path();
path.addCircle(200,200,100,Direction.CW);
c.clipPath(path); // c is a Canvas
Теперь на холсте есть область обрезки, которая предотвращает рисование чего-либо за пределами границы этого круга. Но что, если я хочу, чтобы область отсечения имела форму пончика (или чего-то еще)?
Я пробовал поиграться с созданием второго контура и использованием на нем toggleInverseFillType, а затем добавлением его к исходному контуру, но это не так. похоже, не работает.
В качестве альтернативы, вместо использования контура, можно ли просто создать растровое изображение для использования в качестве маски и каким-то образом установить его как обтравочную маску на холсте?
РЕДАКТИРОВАТЬ: Ответ - именно то, что мне нужно, с одним небольшое дополнение. При выполнении нескольких операций на холсте всегда используйте Op.REPLACE при первом вызове clipPath. Это заменит любой существующий clipPath на этом холсте.
Для справки, вот что я обнаружил, что означают 6 различных значений Region.Op. Представьте себе диаграмму Венна с двумя кружками. «B» - это часть, где два круга перекрываются. «А» - это неперекрывающийся левый кружок. «C» - это неперекрывающийся правый кружок.
c.clipPath(a,Region.Op.REPLACE);
c.clipPath(b,???);
Region.Op.DIFFERENCE -> A..
Region.Op.INTERSECT -> .B.
Region.Op.REPLACE -> .BC
Region.Op.REVERSE_DIFFERENCE -> ..C
Region.Op.UNION -> ABC
Region.Op.XOR -> A.C
Символ "." указывает на часть, которая не нарисована. Извините, если это не совсем понятно. Без графики это сложно описать хорошо.