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

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

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

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

Обновить

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

 schwiz30 сент. 2010 г., 21:11
Если вы вернете false в событии касания, оно должно передать четное число до следующей вещи в строке. Иногда это очень сложно выполнить правильно в зависимости от иерархии макетов, но вы на правильном пути. Если вы разместите свои XML-файлы макетов и слушателей onTouch, мы сможем что-то выяснить.
 znq30 сент. 2010 г., 13:17
Ну, у меня уже есть это. Однако я хочу, чтобы событие касания обрабатывалось главным слоем на заднем плане, например, текстовое поле.
 schwiz29 сент. 2010 г., 18:46
Можете ли вы справиться с обнаружением столкновения самостоятельно, получить XY на вашем событии касания, и если он находится вне радиуса, не обрабатывает ввод?
 znq01 окт. 2010 г., 11:29
@schwiz: для этого я создал отдельный вопрос:stackoverflow.com/questions/3832893/...  (Причина, по которой я создал для этого отдельный вопрос, заключается в том, что с помощью этого вопроса я все еще хотел бы выяснить, могу ли я иметь круглый холст) У меня есть возвращаемое значение false, а также ведется журнал для прослушивателей касания, но это не так. даже перейти к следующему элементу в иерархии (всплывающее окно).

Ответы на вопрос(3)

Решение Вопроса

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

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

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

 znq04 окт. 2010 г., 11:51
Спасибо zserge за подробный ответ. Последнее, что я упомянул, это именно то, что я делаю сейчас, но у меня есть некоторые другие проблемы с этим, которые я описал здесь:stackoverflow.com/questions/3832893/...

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

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

 znq29 сент. 2010 г., 18:32
Возможно, я не объяснил себя правильно, но я добавил изображение, чтобы уточнить. Я не думаю, что Selector является решением этой проблемы, но если я ошибаюсь, пожалуйста, дайте мне знать.
 znq30 сент. 2010 г., 13:19
Круг - это своего рода «всплывающее окно», парящее над основным слоем. Он находится на оси Z, выходящей за пределы экрана над основным представлением содержимого. Вы можете видеть его как AlertDialog, но круглый вместо прямоугольного и возможность выбора элементов на фоне.
 Macarse29 сент. 2010 г., 22:26
Можете ли вы объяснить, что это за круг? это изображение должно показываться всегда? у него должен быть селектор? Я могу получить к нему доступ с помощью dpad?
 znq30 сент. 2010 г., 17:12
На самом деле, посмотрев обе ссылки снова, я все еще не понимаю, как использовать там Селектор. Подготовлю код и добавлю его в мой вопрос в ближайшее время.
 Macarse30 сент. 2010 г., 15:06
@Stefan Klumpp: он должен работать с селектором, можете ли вы вставить код, чтобы воспроизвести проблему?
 znq30 сент. 2010 г., 16:59
@Macarse: Возможно, ты прав. Может ли быть так, что ссылка в вашем ответе неверна, и вы пытались указать мне на это?developer.android.com/reference/java/nio/channels/Selector.html  Вот почему я был сбит с толку и думал, что вы имели в виду с Selector не правильно.

Ваш ответ на вопрос