Подтвердить что ты не робот

Android: я могу создать представление/холст, который не является прямоугольным, но, например, круглый?

У меня есть представление, которое округляется и нависает выше (- > в направлении оси z, выходящем из экрана) основного содержимого. Когда кто-то забирает экран, я хочу, чтобы либо основной контент был выбран, либо вид сверху, когда он закрывает основной вид.

Пока это работает отлично. У меня круглый образ на прозрачном холсте. Это означает, что вы можете видеть все, что находится за пределами этого круга. Тем не менее, вы не можете выбрать его, потому что он по-прежнему является парящим холстом, просто с прозрачной краской.

Теперь мне интересно, чтобы решить эту проблему, если можно сделать сам вид/холст круглой формы?


Обновление

Я добавил изображение для лучшего объяснения, чего я пытаюсь достичь. alt text

4b9b3361

Ответ 1

Насколько я знаю - это невозможно. Я проверил источники View.java на git.kernel.org и основан на Rect-rect - определяет положение, размер, регионы для аннулирования и т.д. ( "Геометрия представления - это прямоугольник." - из комментариев в View.java)

Что касается класса Canvas - он обычно строится поверх Bitmap или GL. Растровое изображение, безусловно, является прямоугольником (матрицей), поэтому холст также представляет собой прямоугольник. Если используется GL, отображается окно просмотра (это тоже прямоугольник).

Кажется, самый очевидный способ проверить, соответствуют ли координаты, переданные вашему методу onTouch(), вашему региону и возвращать false, если они этого не делают. Затем событие будет передано в Вид ниже, и оно должно обработать событие.

Ответ 2

Вероятно, он больше не относится к оригинальному пользователю, но для тех, кто все еще смотрит, похоже, что это будет добавлено в L: https://developer.android.com/preview/material/views-shadows.html#clip. Метод View.setClipToOutline позволяет обрезать представление в форме прямоугольной, круглой или круглой прямоугольной вытягиваемой.

Ответ 3

Вам нужно указать Android Selector, чтобы избежать изображения, зависящего от по умолчанию.