Как на Android создать области обрезки странной формы?

Вот как создать область обрезки в форме круга:

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

Символ "." указывает на часть, которая не нарисована. Извините, если это не совсем понятно. Без графики это сложно описать хорошо.

18
задан Simon Sarris 5 August 2012 в 00:47
поделиться