Перейти к содержанию
  • Регистрация
  • 0
Yarpda

Андроид. Обучение пользователя новым функциям приложения

Вопрос

В серьезных приложениях (Сбербанк-онлайн или Ютюб и т.п.) когда выходят обновления с новыми функциими, они запускают своеобразный интерактивный ролик. Когда экран затемняется и остается не затемненным только новый элемент экрана например, а на затемненном фоне описывается что делает этот новый элемент.Потом все это плавно переходит к другому элементу и т.д. Выглядит все довольно красиво.

Задался вопросом, как сделать что-то подобное под FMX. Для себя не нахожу никаких очевидных решений.
Подскажите если кто знает, направления решения этой задачи?

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

Тоже задумывался об этом, правильного ответа не знаю, но мысли есть:

Вариант 1
-сделать скриншот всего экрана (программно из дельфи, даже не экрана а формы)
-затенить весь скриншот, предположим на 40-50% (т.е. снизить интенсивность каждого пикселя)
-зная местоположение вашей кнопки с новой фичей, вырезать эту область из альфаканала скриншота (если делать круто - то вырез должен быть не прямоугольным а круглым, соотв. нужно както преобразовать прямоугольную кнопку в подходящих размеров круг)
-вывести этот скришнот поверх всех контролов формы, не забыть положить на скриншот текст с описанием фичи и кнопкой перехода к следующей фиче.

Вариант 2
-сделать скриншот всего экрана тупо чтобы знать его размеры
-залить черным цветом
-залить весь альфаканал на те же 40-50% (т.о. если вывести эту картинку поверх, она будет лишь затенять все что под ней)
-аналогично предыдущему пункту вырезать дырку в альфаканале
-аналогично предыдущему пункту вывести поверх формы

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

Также буду раз услышать другие варианты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

1. Сделать скриншот формы.

2. Показать новую форму с фоном скриншота (слегка размыв скриншот)

3. На новой форме лепить что душе угодно, переходы и т.д.

4. По окончании обучающего ролика, закрыть форму ролика и взвести флаг, что ролик показан! (для последующих не выводом ролика)

это если изолированный ролик, как таковой. если нужны подсказки к контролам, то можно выводить кастомные toast-ы, например с помощью Layout и обычного Rectangle поверх.

Изменено пользователем #WAMACO

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

1.Можно взять Rectangle, залить его с Alpha 70%. И поместить в него изображение.

2.Затем расчитать абсолютное положение контрола на форме, его размеры,сделать его скриншот.

3.Изображению задать соответствующие размеры, координаты и скриншот контрола, можно добавить свечение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ну идеи со скриншотами не хотелось бы рассматривать, а то можно дойти до идеи "делаем видео со всем и вставляем в приложение плеер".
Это не совсем то что хочется.

В идеале хотелось бы сделать такое компонент, кидаешь его на форму. А в него передаешь в метод этого компонента  контролл этой формы и надпись текста, компонент находит его расположение, делает всю анимацию и выводит текст. В общем то все это можно сделать, но вот вариант с красивым затенением, выделением нужного объекта и плавной анимацией на FMX я как-то слабо себе представляю, хотя и не исключаю, что это возможно...

Вот был бы  в FMX графический компонент в виде бублика, т.е. с возможностью установки внешнего и внутреннего радиуса, вот с ним наверное было бы интересно попробовать, но к сожалению его нет. А как его сделать я совсем не знаю.

Изменено пользователем Yarpda
дополнил

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 минуты назад, Yarpda сказал:

Ну идеи со скриншотами не хотелось бы рассматривать, а то можно дойти до идеи "делаем видео со всем и вставляем в приложение плеер".
Это не совсем то что хочется.

В идеале хотелось бы сделать такое компонент, кидаешь его на форму. А в него передаешь в метод этого компонента  контролл этой формы и надпись текста, компонент находит его расположение, делает всю анимацию и выводит текст. В общем то все это можно сделать, но вот вариант с красивым затенением, выделением нужного объекта и плавной анимацией на FMX я как-то слабо себе представляю, хотя и не исключаю, что это возможно...

Вот был бы  в FMX графический компонент в виде бублика, т.е. с возможностью установки внешнего и внутреннего радиуса, вот с ним наверное было бы интересно попробовать, но к сожалению его нет. А как его сделать я совсем не знаю.

ну так, все что выше написали, оформите, как компонент и будет счастье! заодно потом и с нами поделитесь! :))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, #WAMACO сказал:

ну так, все что выше написали, оформите, как компонент и будет счастье!

Прям с языка сняли 😃

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 минуту назад, #WAMACO сказал:

ну так, все что выше написали, оформите, как компонент и будет счастье! заодно потом и с нами поделитесь! :))

Так нет же бублика.... ((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
5 минут назад, Yarpda сказал:

Так нет же бублика.... ((

не очень понял, что за "бублик"

2 круга имеется ввиду? так нарисовать можно на канвасе, что душе угодно! 😂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, Barbanel сказал:

Так руки же есть? Пишите)))
Или у вас лапки?)))

В плане графики просто их нет... )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 минуты назад, Yarpda сказал:

В плане графики просто их нет... )

сверху написал рекомендацию - 2 круга, один диаметром по-больше, другой внутри - по-меньше...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
6 минут назад, #WAMACO сказал:

Вот был бы  в FMX графический компонент в виде бублика, т.е. с возможностью установки внешнего и внутреннего радиуса,

Кстати есть. TCircle
Задайте ему размер и толщину Stroke и будет вам счастье)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
7 минут назад, Barbanel сказал:

Кстати есть. TCircle
Задайте ему размер и толщину Stroke и будет вам счастье)

О! А это идея. сделал Stroke побольше, а Fill.kind убрал в ноль, и получился нужный мне бублик!
Вот видите, коллективный разум в очередной раз доказал свою эффективность.
Буду пробовать, спасибо! 🙃

Изменено пользователем Yarpda
о

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Я бы не делал скриншот. А просто поместил поверх прозрачный TPaintBox. А в OnPaint просто вычислил область ,которую не надо закрашивать и просто закрасил paintBox кистью с прозрачностью с учетом выреза.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

В аттаче пример того как я себе представляю такую реализацию. Будем использовать в нашем проекте.
Буду рад критике, предложениям, и все такое.

Screenshot_22.thumb.png.c94bd9a2e7a9c6b23ea9f0700b5a4ab2.png

TestWhatsNew.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
33 минуты назад, Barbanel сказал:

В аттаче пример того как я себе представляю такую реализацию. Будем использовать в нашем проекте.
Буду рад критике, предложениям, и все такое

 

Да, как раз что-то типа этого я и хотел. Возможно только с какой-то анимацией, но это и самому можно поиграться. Спасибо за пример, много времени сэкономлю!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Ali Ezzeddine
      65/5000       Уважаемые,
      Есть ли способ вызвать сервис Java из приложения Delphi FMX?
    • От Эрик Шакиров
      Привет всем! Кто нибудь может подсказать как реализовать анимацию переходов между формами в Android без использования TabControl? Или подсказать в какую сторону "рыть"
    • От Светлана
      Ну всё в принципе как всегда, либо я барашка, либо лыжи не едут)
      А всё просто - я хочу, чтобы пока данные с сервера загружались по клику кнопки, пользователю элементарно был отклик в виде крутящейся какой нибудь фигни и он видел, что процесс идёт и что прога не зависла и никуда лишний раз не тыкал.
      Пока что для тестов сделала элементарно кнопку Update (speedbutton с image), данные элементарно грузятся и отображаются в GridPanel, а поверх него, чтоб пользователь и не смог куда либо тыкнуть, замостила панелькой с Image, вращаемой по таймеру (всё это дело наверху Visible:=false). И когда клацаем по кнопке Update, то панельку сверху грида делаю отображаемой и запускаю таймер, потом этот же обработчик/процедура грузит данные, а по окончанию останавливаем таймер и скрываем полупрозрачну, еще кстати, панельку. Аля вот так:
      procedure TForm1.SB_DataUpdateClick(Sender: TObject); begin //отображаем лого загрузки P_showLoad.Visible := true; Timer_load_rotate.Enabled := true; //с запуском таймера GetDeD_List(DE_set.Date); //процедура загрузки и отображения чего нам надо, которая весьма долго выполняется //и скрывае лого загрузки Timer_load_rotate.Enabled := false; //уже в обратном порядке P_showLoad.Visible := false; end; иии... ни черта не происходит как я хочу(
      Это лого вообще в итоге не отображается, а если убрать его скрытие, то оно у нас отобразится уже только тогда, когда всё загрузится. Логика мне стала подсказывать, что следовало его как то отобразить выполнив в параллельном асинхронном потоке аля так:
      procedure TForm1.SB_DataUpdateClick(Sender: TObject); begin TThread.Queue(TThread.Current, //TThread.Queue TThread.Synchronize ForceQueue procedure() begin P_showLoad.Visible := true; Timer_load_rotate.Enabled := true; end); GetDeD_List(DE_set.Date); //процедура загрузки и отображения чего нам надо, которая весьма долго выполняется end; И опять оно отображается только после того, как всё загрузится и проработает вся процедура. И уже чего только не пробовала и Synchronize и ForceQueue; и через TTask.Run и |task := TTask.Create(procedure () ... и т.д.| ничего не подходит, вот хоть убейся это всё дело будет отображаться только после полной отработки процедуры клика. Может я не в том направлении вообще рою и это как то по другому делается? Может я еще пока отлаживаю на Win32, а не всё на android, а там вот пара вариантов и норм на нём работают? Но чтот я никак не могу понять, что к чему... должно же быть как то просто, а я чтот никак не могу понять как(
    • От ComAlex
      Goоgle Play перестает поддерживать 32-bit Android-приложения c 01.08.2019.
      А выкладывать в Goоgle Play новые УЖЕ нельзя.
      Последние же Delphi XE не позволяют создать 64-bit Android-приложения.
      Кто знает, когда появится новая версия с поддержкой 64 - bit? Говорили, что в конце лета, но лето кончилось
    • От ComAlex
      Здравствуйте, господа программисты!
      Пытаюсь протестировать Android приложение на любом эмуляторе.
      Всегда одна ошибка "Unable to create process: Performing Streamed Install"
      Понимаю, что ссылок много по данной теме в интернете, но ни одна не помогла.
      Использую Embarsadero Delphi 10.3
      При компиляции на реальный телефон всё работает
      При компиляции на эмулятор даже пустого приложения выдается та же ошибка
      "Unable to create process: Performing Streamed Install"
      В чем проблема? Хотя бы в какую сторону копать?
    • От Дмитрий Потапов
      Задался идеей написания IPTV приложения "для себя", в котором при желании смог бы реализовать что-то необходимое и удалить то, что не нужно.
      Собственно вопрос в другом: Я написал простое приложение, которое отлавливает коды кнопок с пульта, приложение по сути самое банальное, использует OnKeyDown и OnKeyUp (чисто для теста). И по нажатию на кнопку на пульте высылает например в Memo или ListBox Информацию о нажатой кнопке (включая ее код).
      Но суть в том, что далеко не все кнопки таким образом распознаются. Для примера:
      Кнопки громкости, назад, домой, увеличение\уменьшение громкости, стрелки(влево, вправо, вверх, вниз) и центральная кнопка (по совместительству OK).
      Цифры все определяются, как одна - 0
      Кнопки, которые не определяются (не срабатывает событие, ибо если был бы неизвестен код, то думаю, в таком случае получил бы все, кроме кода кнопки), но по нажатию кнопки, которая не определяется приложением - ничего не происходит вообще.
       
      Вопрос: Есть ли возможность как-то "научить" приложение распознавать эти кнопки? (Я где-то читал, может даже и здесь, что это все так реализовано именно на уровне самого FireMonkey, будто этих кнопок вообще не существует).
      Если эта тема уже поднималась на форуме или вопрос очень просто решается - извиняюсь)
      Решение: http://fire-monkey.ru/topic/5624-как-отловить-кнопки-пульта-ду/?do=findComment&comment=36399
       
    • От Татьяна
      Здравствуйте!
      Как можно из Android приложения узнать электронный адрес пользователя gmail (если он был настроен, конечно). Где-то же он сохраняется, если Google Play знает.
    • От msp888
      Всем привет! 
      У меня уже несколько лет работают приложения под Windows и под Andriod, в которых выполняется обмен данными по локальной сети по протоколу TCP-IP. Теперь вот мне понадобился прием multicast-пакетов по протоколу UDP. Под Windows всё работает замечательно, а вот под Android ничего принять не могу... 
      Подскажите чего не хватает, или дайте ссылку на пример, где уже реализовано подобное...
      Вот выдержки из кода:
      // переменные FSocket:TSocket; FiAR:IAsyncResult; FasyncWE:TMultiWaitEvent; data:TBytes; res:TWaitResult; WifiLock: JWifiManager_WifiLock; MulticastLock: JWifiManager_MulticastLock; ... // регистрация в группе procedure AddMemberShip(MultiAddr, InterfaceAddr:Cardinal); var Mreq:ip_mreq; begin fillchar(Mreq, SizeOf(Mreq), 0); move(MultiAddr, Mreq.IMR_MultiAddr.S_addr, SizeOf(Mreq.IMR_MultiAddr.S_addr)); move(InterfaceAddr, Mreq.IMR_Interface.S_addr, SizeOf(Mreq.IMR_Interface.S_addr)); CheckSocketResult(setsocketoption(FSocket.Handle, IPPROTO_IP, IP_ADD_MEMBERSHIP, Mreq, SizeOf(Mreq)), 'setsockopt:IP_ADD_MEMBERSHIP'); end; ... // permission... ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION ACCESS_NETWORK_STATE ACCESS_WIFI_STATE CHANGE_CONFIGURATION CHANGE_NETWORK_STATE CHANGE_WIFI_MULTICAST_STATE CHANGE_WIFI_STATE INTERNET READ_CALENDAR READ_EXTERNAL_STORAGE WRITE_CALENDAR WRITE_EXTERNAL_STORAGE WAKE_LOCK ... // настройка wi-fi WifiLock.acquire; MulticastLock.acquire; ... // создание и настройка сокета FSocket:=TSocket.Create(TSocketType.UDP); FSocket.Bind(TNetEndpoint.Create(ServerIP, ServerPort)); AddMemberShip(TIPAddress.Create(239, 78, 1, 1).Addr.S_addr, ServerIP.Addr.S_addr); AddMemberShip(TIPAddress.Create(239, 78, 1, 2).Addr.S_addr, ServerIP.Addr.S_addr); AddMemberShip(TIPAddress.Create(239, 78, 1, 78).Addr.S_addr, ServerIP.Addr.S_addr); ... // Прием данных в потоке... FiAR:=FSocket.BeginReceiveFrom; FasyncWE:=FiAR.AsyncWaitEvent; res:=FasyncWE.WaitFor; if res = wrSignaled then data:=FSocket.EndReceiveBytesFrom(FiAR); // Прием  
    • От Brovin Yaroslav
      Хочу поделиться с вами знаковой новостью для развития библиотеки FGX Native. Официально выпущено первое Андроид приложение в Google Play Market. 
      Это приложение разработано Станиславом(@sinuke) для учащихся лицея по специальности "Почтовая связь". Оно одновременно является и полным конспектом, который всегда под рукой, и системой проверки своих знаний.
      Полностью разработано на Delphi и стандартных компонентах альфа версии FGX Native 0.9.7.0 в Delphi 10.3 Community Edition. Быстрые списки, гибкая разметка, продвинутая навигация, анимации переходов, поддержка тем и многое другое. Это лишь малая часть того, что было задействовано из текущих возможностей библиотеки.
      Приложение опубликовано в Google Play Market. Вы можете уже прямо сейчас скачать и протестировать приложение самостоятельно, загрузив его по ссылке (https://play.google.com/store/apps/details?id=com.sinukeapps.post).
      Оставляйте свои комментарии и предложения. Они помогут сделать приложение лучше, а FGX Native еще удобнее и стабильнее.
      Релиз первого приложения с использование библиотеки FGX Native - это результат огромной работы, проделанной за эти годы. В тоже время, это сигнал того, что библиотека обладает достаточным минимумом для создания типовых Андроид приложений.
      Ну, и пожалуй самое приятное, это то, что библиотека готова к бета тестированию, которое откроется в ближайшее время.  О начале закрытого бета тестирования будет сообщено позже.
      Отдельное спасибо участникам закрытого альфа тестирования за поддержку, тестирование и идеи по улучшению библиотеки. В настоящее время участниками тестирования ведутся и другие интересные проекты на базе FGX Native, о которых я расскажу позже.
      Следите за новостями.
      Приложение: https://play.google.com/store/apps/details?id=com.sinukeapps.post Автор: Станислав Игнатович @sinuke Минимальные системные требования: Android 5.0 и arm v7         
    • От RADStudioDeveloper
      Привет всем!
      Есть необходимость в проекте для Android Delphi FMX (RAD Studio 10.2.3 Tokyo / RAD Studio 10.3.1 Rio ) сохранять изображения с фотокамеры смартфона Android через WiFi соединение в удалённую базу данных Microsoft SQL сервера в поле BLOB.
       
      Подскажите, пожалуйста,  возможные решения, примеры Delphi кода и требуемые компоненты для работы с камерой и SQL сервером через WiFi на Android устройствах.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...