Russian Qt Forum
Ноябрь 22, 2024, 12:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Отображение splash картинки во время загрузки приложения на Android  (Прочитано 17571 раз)
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« : Декабрь 16, 2015, 23:06 »

Делаю приложение на Quick, при загрузке на андроиде, сперва видно нативную активити секунду, потом черный экран несколько секунд, и только потом всё стартует. Хотелось бы спрятать всё это безобразие за splash экраном.

Кто-нибудь эту проблему решил как нибудь?

Чую, что надо наследовать кутэшную активити на жабке и отображать на ней сплеш, до тех пор, когда Quick не будет готов. Но инфы/примеров пока не нашел как добраться до этой активити и как от нее отнаследоваться  В замешательстве
Записан

Гугль в помощь
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Декабрь 16, 2015, 23:18 »

ну так добавь сплаш в манифест, в чём проблема?
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #2 : Декабрь 18, 2015, 10:32 »

Ок, допустим я создам файл новой активити, отнаследуюсь от стандартной кутэшной, файл судя по build.gradle надо положить в папку: android/src ?

Код:
java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java']

Далее я думаю разместить каким-то образом компонент картинку поверх opengl view, на который выводится qtquick. И уже после того как заработает код qtquick прятать эту картинку. Видать надо как-то через JNI настроить проброс сигнала в JAVA-код..

Правильно я мыслю или можно как-то проще?

ЗЫЖ Какого чёрта это не сделано в самом Qt? Вроде бы нужная функция с учётом того как тормозно загружается QtQuick на Android.
Записан

Гугль в помощь
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Декабрь 18, 2015, 10:41 »

Ок, допустим я создам файл новой активити, отнаследуюсь от стандартной кутэшной, файл судя по build.gradle надо положить в папку: android/src ?

Ещё раз - почему ты не хочешь использовать сплаш через свой манифест? Всё что тебе потребуется это поменять манифест, и добавить картинки для сплашей под разные dpi. Не нужно при этом менять активити.
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #4 : Декабрь 18, 2015, 10:53 »

Я слегка погуглил и нагуглил, что в андроиде нет сплеша как такового и решается всё это через дополнительное активити.

Второе, QtQuick грузится во время старта стандартного кутэшного активити. Соответственно, если я буду показывать свой сплэш в отдельном активити, то в это время QtQuick грузиться не будет, а начнёт только когда дело дойдет до кутэшного активити. В общем эффект черного экрана никуда не пропадёт. Так?

Я далёк от разработки под андроид, наверное, поэтому мои вопросы странные  Смеющийся
Записан

Гугль в помощь
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Декабрь 18, 2015, 10:58 »

Я слегка погуглил и нагуглил, что в андроиде нет сплеша как такового

Где ты такое нагуглил? В AndroidManifest.xml внутрь активити прописывается сплаш:
Код
XML
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash"/>

Я не помню насколько хорошо он работает, ЕМНИП чёрный экран всё ранво был на долю секунды. Не знаю как на последней версии Qt.
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #6 : Декабрь 18, 2015, 11:02 »

Я слегка погуглил и нагуглил, что в андроиде нет сплеша как такового

Где ты такое нагуглил? В AndroidManifest.xml внутрь активити прописывается сплаш:
Код
XML
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash"/>

Я не помню насколько хорошо он работает, ЕМНИП чёрный экран всё ранво был на долю секунды. Не знаю как на последней версии Qt.

Надо попробовать, как доберусь. Хотя есть сомнение, что андроидовский сплеш уберется как только стартанёт активити, и оно потом будет прогружать QtQuick с черным экраном.
Записан

Гугль в помощь
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #7 : Декабрь 19, 2015, 02:19 »

Получилось со сплэшем. Спасибо за наводку.

Опишу подробно как сделать сплэш.

1) Если в проекте еще не создан шаблон для сборки под android, то надо зайти в свойства проекта и нажать кнопку Android->Run->Build Android APK->Android->Create Templates. При этом будет создана папка android в корне исходников с файлами для сборки APK.

2) Создать splash картинки (logo.png) нескольких размеров и положить их в соответствующие папки:
Код:
android/res/drawable-mdpi/logo.png
android/res/drawable-hdpi/logo.png
android/res/drawable-xhdpi/logo.png

  • xlarge (xhdpi): 640x960
  • large (hdpi): 480x800
  • medium (mdpi): 320x480

Возможно можно обойтись одной картинкой, под остальные размеры она смаштабируется. Решать вам.

3) В AndroidManifest.xml раскомментировать <meta-data android:name="android.app.splash_screen_drawable" ...

Код:
<!-- Splash screen -->
<!--
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/>
-->
<!-- Splash screen -->

4) Также можно скрыть ActionBar появляющийся при старте activity (такая полоска сверху с заголовком приложения)

Для этого надо дописать в тэг activity атрибут android:theme="@android:style/Theme.NoTitleBar" примерно так:

Код:
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Audio Tales" android:screenOrientation="unspecified" android:launchMode="singleTop" android:theme="@android:style/Theme.NoTitleBar">

В итоге мы получим следующее:

Приложение стартует и мы видим некоторое непродолжительное время черный экран, затем появляется наш splash. В это время прогружается QML/Quick. Затем долю секунды мигает черным и уже нормально запускается наше приложение.

24.07.2016 UPD:

Нашел неплохой мануальчик какого-то китайца: https://medium.com/@benlaud/complete-guide-to-make-a-splash-screen-for-your-qml-android-application-567ca3bc70af#.21z1enmvu
« Последнее редактирование: Июнь 24, 2016, 20:53 от navrocky » Записан

Гугль в помощь
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #8 : Январь 21, 2017, 18:15 »

Вчера заморочился по поводу этого черного мерцания на долю секунды и был найден workaround. Подробно описал здесь: https://bugreports.qt.io/browse/QTBUG-43558
Теперь все работает отлично, как и у нативных приложений, без всяких мерцаний.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
docent
Гость
« Ответ #9 : Февраль 17, 2017, 11:14 »

Подскажите пожалуйста, есть ли подобное решения для iOS?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #10 : Февраль 17, 2017, 13:49 »

а там сложности с этим? все разжевано например тут http://stackoverflow.com/questions/18976412/launch-screens-supporting-ios6-and-ios7-forced-to-splash-screen
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #11 : Февраль 20, 2017, 18:51 »

kambala, я полагаю, что docent имел в виду проблему с мерцанием черного экрана между splash и запуском Qt приложения. Как я написал выше, в Android я смог найти вариант решения проблемы, а iOS пока особо не занимался, но пробовал запускать приложение. Там тоже заметил этот мелькающий черный экран. С iOS опыта не имею, так что если кто знает  как убрать это мерцание, тоже послушаю  Улыбающийся
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #12 : Февраль 20, 2017, 19:14 »

как вариант, можно просто отображать загрузочную картинку руками как только запустилось приложение. для этого надо или использовать свой класс, реализующий протокол UIApplicationDelegate, либо подписаться на UIApplicationDidFinishLaunchingNotification. могу попробовать сделать тестовый проект с этой реализацией.

как решить это без использования objc/swift кода не знаю, с Qt на iOS пока не работал.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #13 : Февраль 20, 2017, 21:19 »

На Android тоже пытались таким образом избежать мерцания, но там проблема была в SurfaceView, который по какой-то непонятной причине сначала показывал черный экран вместо приложения. Т.е. даже если у себя в Qt-приложении сделать идентичный Splash, то в нем нет смысла, т.к. сам SurfaceView мерцает при старте. Видимо в iOS похожая проблема.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #14 : Февраль 21, 2017, 03:05 »

создал Qt Quick Controls 2 Application в свежем креаторе, запустил на девайсе — никакого мерцания нет. ЧЯДНТ? Qt 5.8.0 (самосборная), Xcode 8.2.1, девайс с iOS 10.2.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.115 секунд. Запросов: 24.