У меня есть пользовательская ViewGroup с 2 дочерними представлениями, сопоставленными с родительскими, и один на другом, один спереди и один сзади. Я хотел вырезать круг в виде спереди, чтобы в этом круге был виден вид сзади. Я сделал это с помощью функции dispatchDraw
, код выглядит следующим образом:
protected void dispatchDraw(Canvas canvas) {
System.out.println("dispatchDraw");
views.get(1).setVisibility(GONE); //views variable is list of child views
super.dispatchDraw(canvas);
Path pathHole = new Path();
pathHole.addCircle(touchPos[0], touchPos[1], 100, Path.Direction.CW);
canvas.clipPath(pathHole, Region.Op.DIFFERENCE);
views.get(1).setVisibility(VISIBLE);
super.dispatchDraw(canvas);
}
В основном я скрыл вид спереди и нарисовал ViewGroup (он рисовал только за видом), затем я обрезал круг, установил Видимость спереди и перерисовка снова.
Вот результат:
Проблема в том, что dispatchDraw
функция переходит на l oop, потому что .setVisibility()
вызывает это dispatchDraw
снова.
Как решить эту проблему или как лучше подходить к этому результату?