Перейти к содержанию
  • Регистрация
  • 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 эмодзи.

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

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

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


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

    • От 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 устройствах.
    • От Евгений Корепов
      Простое приложение для андроид - форма, на ней TWebBrowser. В WebBrowser открываем что то требующее разрешение на геолокацию. У примеру https://www.openstreetmap.org 
      В обычном браузере, при тыке на "Показать мое местоположение" появится popup окно с запросом разрешения на "Доступ к данным о вашем местоположении".
      Но в Delphi приложении описанном выше никакого запроса не приходит. ?
      Нашел решение для java https://forums.fusetools.com/t/geolocation-not-enabled-in-webview-on-android/1374 
      В функцию создания WebView 
      public static Object CreateWebView321(final boolean zoomEnabled,final boolean scrollEnabled) { ScrollableWebView wv = new ScrollableWebView(com.fuse.Activity.getRootActivity()); wv.getSettings().setJavaScriptEnabled(true); wv.getSettings().setUseWideViewPort(true); //enabled viewport meta tag wv.getSettings().setLoadWithOverviewMode(true); //mimic iOS Safari and Android Chrome wv.getSettings().setSupportZoom(zoomEnabled); wv.getSettings().setBuiltInZoomControls(zoomEnabled); wv.getSettings().setDomStorageEnabled(true); wv.setAllowScroll(scrollEnabled); return wv; } рекомендуется добавить следующий код
      wv.getSettings().setGeolocationEnabled(true); wv.setWebChromeClient(new WebChromeClient(){ @Override public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) { callback.invoke(origin, true, false); } }); В модуле FMX.WebBrowser.Android.pas это выглядит так
      constructor TAndroidWebBrowserService.Create; var LayoutParams: JRelativeLayout_LayoutParams; begin FWebView := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity); FWebView.getSettings.setJavaScriptEnabled(True); FListener := TWebBrowserListener.Create(Self); FWebView.SetWebViewListener(FListener); FFocusChangeListener := TFocusChangeListener.Create(Self); FWebView.setOnFocusChangeListener(FFocusChangeListener); FWebView.getSettings.setGeolocationEnabled(True); FWebView.getSettings.setAppCacheEnabled(True); FWebView.getSettings.setDatabaseEnabled(True); FWebView.getSettings.setDomStorageEnabled(True); FWebView.getSettings.setBuiltInZoomControls(True); FWebView.getSettings.setDisplayZoomControls(False); FWebViewContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); FChildrenContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FWebView, LayoutParams); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FChildrenContainer, LayoutParams); SetEnableCaching(True); end; Вот суть вопроса - добавить delphi код. Пробую что то вот такое, но закончить ума не хватает
      constructor TAndroidWebBrowserService.Create; var LayoutParams: JRelativeLayout_LayoutParams; begin FWebView := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity); FWebView.getSettings.setJavaScriptEnabled(True); FListener := TWebBrowserListener.Create(Self); FWebView.SetWebViewListener(FListener); FFocusChangeListener := TFocusChangeListener.Create(Self); FWebView.setOnFocusChangeListener(FFocusChangeListener); FWebView.getSettings.setGeolocationEnabled(True); FWebView.setWebChromeClient( TJWebChromeClient.Create.onGeolocationPermissionsShowPrompt( origin: JString; callback: JGeolocationPermissions_Callback);..... FWebView.getSettings.setAppCacheEnabled(True); FWebView.getSettings.setDatabaseEnabled(True); FWebView.getSettings.setDomStorageEnabled(True); FWebView.getSettings.setBuiltInZoomControls(True); FWebView.getSettings.setDisplayZoomControls(False); FWebViewContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); FChildrenContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FWebView, LayoutParams); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FChildrenContainer, LayoutParams); SetEnableCaching(True); end;  
    • От brunnengi
      Здравствуйте.
      Как отключить клавиатуру, что бы она не вылетала при получении фокуса в полях ввода?
    • От Mohamed BEN AMMAR
      hello 
      i'm using delphi fmx for building android App
      i have this code for Activating The WI-FI icon from android device:
      This could be found here .
      =========== code ==================
      uses
        Androidapi.Helpers,
        Androidapi.JNI.JavaTypes,
        Androidapi.JNI.GraphicsContentViewText,
        Androidapi.JNIBridge,
        Androidapi.JNI.WifiManager;
        procedure SetWifiEnabled (AEnable: Boolean); var   Obj: JObject;   WifiManager: JWifiManager; begin   Obj: = SharedActivityContext.getSystemService (TJContext.JavaClass.WIFI_SERVICE);   if Obj = nil then     Exit;     WifiManager: = TJWifiManager.Wrap ((Obj as ILocalObject) .GetObjectID);   WifiManager.setWifiEnabled (AEnable); end; 
       
       My question is About Activating Android location:
        Is it possible to activate the service location icon from android device
       programatically without using the Location or TLocationSensor component ....?
      however I know exactly that google has been Deactivate this API since android "4" just for security reasons .....
      but i have seen many apps in playstore can activate the service without using 
      this code here ask the user for activate the location manually .... procedure TForm1.GPSSettings; {$IFDEF ANDROID} var Intent: JIntent; {$ENDIF} begin {$IFDEF ANDROID} Intent := TJIntent.Create; Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_LOCATION_SOURCE_SETTINGS); TAndroidHelper.Activity.startActivity(Intent); {$ENDIF} end; in other versions like lolipopup can show just the Allow Permission system dialog timer ....( Asking the user for Allowing this App to Activate the service location ......) 
      I have an android device with lolipopup version and i try to execute the location EMBARCADERO sample but 
      this one can not activate the service location ICON even  my device show me the Allow permission dialog where i choose yes allow
      with never ASK....
      Finally ,  I like the WI-FI code above .....
      and i'm wondering if someone here can do this task for me (i need a unit as the WI-FI code above which can offer me
      the option to activate the Service Location ICON )
      I'm ready to paid for that task .....
       
      Sincerelly: Brave.
    • От GMX
      Android 6 MIUI
       ни стандартные примеры не работают, ни попытки что-то свое создать... 
      LastDiscoveredDevices - всегда 0, хотя из настроек устройства находятся. 
      unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Bluetooth, System.Bluetooth.Components, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Bluetooth1: TBluetooth; Label1: TLabel; AniIndicator1: TAniIndicator; procedure Button1Click(Sender: TObject); procedure Bluetooth1DiscoverableEnd(const Sender: TObject); procedure Bluetooth1DiscoveryEnd(const Sender: TObject; const ADeviceList: TBluetoothDeviceList); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Bluetooth1DiscoverableEnd(const Sender: TObject); begin Label1.Text := IntToStr(Bluetooth1.LastDiscoveredDevices.Count); end; procedure TForm1.Bluetooth1DiscoveryEnd(const Sender: TObject; const ADeviceList: TBluetoothDeviceList); begin Label1.Text := IntToStr(ADeviceList.Count); AniIndicator1.Enabled :=False; end; procedure TForm1.Button1Click(Sender: TObject); begin Bluetooth1.DiscoverDevices(10000); AniIndicator1.Enabled :=True; end; procedure TForm1.FormCreate(Sender: TObject); begin while not Bluetooth1.Enabled do Bluetooth1.Enabled := True; end; end. В разрешениях bluetooth, bluetooth admin, coarse location, fine location включены... 
    • От Barbanel
      Всем привет!
      Поясните мне плиз, такую вещь как TTouchAnimation, на примере Android.
      Как я это понимаю:
      Есть к примеру некая кнопка, которая имеет несколько состояний, из которых важны: не нажатая и нажатая.
      В момент нажатия, TTouchAnimation пускает расходящийся круг, причем четко из центра нажатия.
      Ок, пусть на самом деле не круг, а картинку, указанную в... собсно, где???
      Как задать эту область, которая должна отображаться как реакция на нажатие?В редакторе среды, у объектов TButtonStyleObject есть свойство TouchAnimation: (TTouchAnimationAdapter), у которого в свою очередь есть свойство Link: (TBitmapLinks), которое как я считал и отвечает за эту область.
      Однако, при клике на это поле ничего не происходит.
      Баг среды, или моя удача???
      Как вы с этим боретесь?
      Других полей, где могли бы быть эти координаты я не нахожу.
      Заранее спасибо!

    • От Yarpda
      Подскажите пожалуйста есть ли какая-то информация по работе с Google календарем из FMX?
      Может быть у кого-то есть практика работы с ним? На форуме информации по этому поводу никакой не нашел.
      Интересует вопрос чтения и создания событий в календаре.
      Заранее благодарю.
    • От Tarik Live
      Здравствуйте! Уже почти неделю пытаюсь завести библиотеку org.eclipse.paho.client.mqttv3-1.2.0 в своём приложении. Я знаю о существовании компонента от TMS, но он не умеет работать в фоновом сервисе.
      Вот код который я использую для тестов:
       
      Стандартная библиотека org.eclipse.paho.client.mqttv3-1.2.0 выпадает в ошибку initializer error сразу на строчке 
      mqtt:=TJMqttClient.JavaClass.init(StringToJString('tcp://m23.cloudmqtt.com:11021'), StringToJString('java')); по логам с телефона стало понятно, что проблема в логах ? а конкретно когда библиотека пытается создать логгер выпадает ошибка что не найден файл локализации ru_RU для logcat (сами файлы там вроде как есть). Ладно. Скачал исходники почистил код библиотеки от упоминаний логгера, собрал ииии и ничего. Продвинулся до строчки 
      mqtt.connect(); также пробивал 
      mqtt.connect(mqttconopt); ничего не помагает, получаю ошибку сегментации класса 
      Пока не понятно куда копать дальше? Возможно что не все библиотеки можно использовать в delphi приложениях? 

      P.S Старая версия 1.1.1 тоже не завелась :(
      service test2.rar
    • От Юрий Гусач
      Доброго дня!
      Проясните пожалуйста ситуацию: при запуске программы  под Андроидом на различных устройствах я получаю размеры формы, которые вроде всегда в разы меньше чем максимальное разрешение экрана конкретного устройства. Я пробовал планшеты и разные смартфоны. Написал тестовую прогу, которая выводит СlientScreen и  ClientWidth формы, на которой ничего больше нет. Например для крайне бюджетного смартфона Fly FS-549 получилось 497 х 320, а по паспорту 854x480. Разрешение и так хреновое, а Delphi его еще сильнее уменьшает. -       Почему это происходит и можно ли как то это обойти?
       
       
  • Последние посетители   0 пользователей онлайн

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

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