Pull to refresh

Comments 19

А как использовать кнопку, если у нее два возможных действия? Ждать когда будет нужное состояние?
Я понимаю, Plat/Pause удачно можно использовать. Но вот даже по вашей ссылке три состояния Play/Pause/Stop.
Можно кратко пояснить?
У неё два действия: первое — вызов меню, а второе, когда меню уже вызвано, — стрелочкой «назад» закрыть это меню (как бы вернуться «назад» к тому, что было до открытия меню.
Пример с Play Маркета

Один пример уже привели в комментарии выше. Кстати, хотел написать сразу в посте, но решил не засорять его лишней информацией — этим примером Google слегка нарушает собственные гайдлайны. Если судить по ним, боковая панель в приложениях с Material Design (в отличие от Holo) должна перекрывать и AppBar с иконкой, и даже заходить на область статусной строки (это поддерживается в Android 5.0).

Второй пример — сделать переход вглубь стека приложения без замены AppBar, только с заполнением области данных приложения новым контентом. Пример есть в том же руководстве по Material Design (см. третье видео).
Вопрос от ЛВХ: что будет, если по кнопке долбить, как дятел, во время анимации?
с этим похоже google play не справляется, у меня получается получить состояние с полуоткрытым меню и полу-повернутой кнопкой. Интересно будет попробовать QML версию, по идее анимация должна всегда завершатся корректно.
Да ничего особенного не произойдёт. Интерпретатор QML проследит, чтобы Item перешёл в то состояние, которое было последним, и все его свойства установились соответствующим образом. В случае с данным переходом, вращение иконки будет завершено, а вот анимация верхнего и нижнего прямоугольников в «бутерброде» не будет завершена и они просто направятся обратно в исходное положение. Я попробовал (предварительно уменьшив скорость анимации), выглядит вполне прилично.

А ещё можно у каждого из экземпляров Animation установить свойство alwaysRunToEnd в true, тогда анимация свойства будет всегда завершаться полностью перед началом следующей анимации. Но в данном случае это не имеет смысла.
Компонент вышел не очень реюзабельный из-за захардкоженных размеров и позиций. Может быть стоит расчитывать их на ходу, исходя из размеров родительского контейнера?
Размеры контейнера жёстко задаются в соответствии с гайдлайном. Конкретно в его случае будет более правильным для корректного масштабирования просто умножать все хардкодные значения на размер dp на данном устройстве (3 для xxhdpi и так далее).

Вообще, тема масштабирования QML-интерфейсов — это большая и отдельная история ещё как минимум на несколько постов. В случае с Android-приложениями и строгим следованием guidelines в целом более выгодной стратегией с моей точки зрения является как раз таки использование коэффициента масштабирования для всех элементов интерфейса. Благо, на Android это делается очень просто, если будет интересно, могу написать отдельный пост о том, как именно.

Если эта тема интересует, рекомендую ознакомиться с серией постов о масштабировании интерфейсов от Nuno Pinheiro, создателя темы Oxygen из KDE и сотрудника KDAB.
Если рассчитывать размеры компонентов исходя из размера родителя — будет достаточно написать умножение на размер dp ровно в одном месте — в размерах родителя.
Это не совсем так — мы не можем жёстко задать соотношение сторон родительского элемента. Соответственно, нам либо придётся опираться только на один линейный размер (например, ширину, что не очень красиво), либо выбирать наименьший из линейных размеров (что некрасиво, неудобно и создаст довольно сложные байндинги для каждого из свойств). Короче, именно в конкретном случае получится ненужное усложнение на ровном месте.
Мне кажется скоро люди наиграются с поворачивающейся анимацией кнопки назад и начнется волна разочарований в материал дизайне как концепции. Слишком агрессивные цвета, слишком навязчивая акшен кнопка, слишком много анимаций и очень много глюков в библиотеке совместимости. Перемудрили.
Хотелось бы спросить. Вы все это сделали только для статьи на хабре или будете использовать где-то в своем проекте?
Нет, исключительно для статьи на Хабре я бы этот компонент точно писать не стал — мне лениво :)

На самом деле, я сейчас в свободное время разрабатываю Android-приложение на C++/QML и пытаюсь сделать максимально нативный интерфейс. Плюс некоторые компоненты используются в проектах, создаваемых по работе. Сейчас у нас накопился целый набор визуальных компонентов на QML в стиле Material Design, но он сыроват, да и сделан в рабочее время. Если удастся договориться с руководством, выложим на Github под какой-нибудь свободной лицензией.
Будем ждать ваше приложение. Пока еще не видел ни одного достойного приложения на QML под андроид. Интересно было бы взглянуть на ваше творение.
А QML Components разве не нативно сейчас выглядят? Не подскажете как они устроены? Они только выглядят так или как-то используют все-таки систему андроида?
Только вот Qt Quick Controls. QML Components deprecated. И таки сейчас да, имеет смысл основывать все кастомные графические примитивы именно на контроллерах из Qt Quick Controls.
Теоретически возможно. На практике контроллеры зачастую могут не поддерживать необходимые элементы оформления для того, чтобы нарисовать «какой хочется» виджет и обеспечить полностью правильный look-and-feel.

За примером далеко ходить не надо — при попытке реализовать стиль элементов в духе этого же самого Material Design, мы натыкаемся на то, что не можем реализовать эффект ripple, так как стилю тупо не передаются события мыши/тач-панели и их координаты. И мы обламываемся, пытаясь начать с самого что ни на есть банального ButtonStyle.
А вы не пробовали патчить сами Qt Quick Components, чтобы сделать это возможным? Ментейнеры там лояльны к практически любым изменениям :)
Баловство все это, но за статью спасибо. В целом на хабре как-то не очень освещают Qt, а они всетаки сделали достаточно функциональный порт под Android.
У меня пожелание
Как насчет изменения y-свойств белых полосок в MenuBackButton.qml
Я предлагаю сделать их симметричными по высоте
y1 — 5
y2 — 11
y3 — 17
В этом случае три полоски будут располагаться ровно в центре, тогда как сейчас они чуть-чуть выше: от вехушки до первой полосы — 5 пикселей, а от 3 полосы до конца — 7 пикселей
Sign up to leave a comment.

Articles