Jetpack Compose — лучший способ обработки компонуемых объектов с точностью до пикселя с помощью ввода указателя.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Jetpack Compose — лучший способ обработки компонуемых объектов с точностью до пикселя с помощью ввода указателя.

Сообщение Anonymous »


Jetpack Compose, похоже, специализируется на пользовательском интерфейсе, который автоматически позиционируется и измеряется относительно остальной части пользовательского интерфейса, без необходимости знать его точный размер. Во многих случаях это здорово, но у меня есть несколько приложений, в которых мне нужен компонуемый объект для рисования с точными координатами и размерами пикселей. Мне также нужно отслеживать ввод указателя на составной элемент в процентах от его размера.


Изображение


Конкретный случай, над которым я сейчас работаю, — это отображение клавиатуры фортепиано, показанной на рисунке, где каждая клавиша должна иметь размер и располагаться в определенных позициях относительно клавиатуры в целом. Кроме того, мне нужно отслеживать указатели на клавиатуре и рассчитывать, какие клавиши нажимаются. В настоящее время я реализую это, используя компонуемый Canvas. Полезно, что холст предоставляет вам свой размер, но я не могу использовать этот размер за пределами холста для отслеживания ввода указателя. На данный момент это мой план.

переменная ширина по памяти {mutableStateOf(0) } высота переменной, запомнив {mutableStateOf(0)} Холст(модификатор = модификатор .background(Цвет.Черный) .pointerInput(ширина, высота) { awaitPointerEventScope { /* отслеживаем указатели и вычисляем, какие клавиши нажимаются с использованием значений ширина и высота */ } }.onSizeChanged { ширина = it.ширина высота = it.height } ) { /* рисуем клавиши фортепиано, используя значения размера.ширины и размера.высоты по размеру и расположите их */ } Мои вопросы:
[*]Использование модификатора .onSizeChanged для отслеживания размера кажется неудобным. Есть ли способ лучше? Я также обеспокоен тем, что такой подход приведет к ошибкам, когда область pointerInput будет отменена и перезапущена при изменении размера, что может привести к потере некоторых событий указателя. [*]Приемлемо ли вообще отображать более крупный компонент пользовательского интерфейса, например клавиатуру фортепиано, полностью используя холст? У меня будет анимация для нажатия клавиш, а использование холста означает, что вся клавиатура будет перерисовываться в каждом кадре анимации. Часто ли вручную реализуют какой-то буфер или кэширование, чтобы избежать перерисовки компонентов, или же набор простых фигур рисуется настолько быстро, что это вообще не имеет значения?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»