Перейти к содержанию
Fire Monkey от А до Я

zairkz

Пользователи
  • Постов

    135
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

Активность репутации

  1. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Отображение в виде плиток   
    странно, но мне кажется дело не в TListView. смотрите внимательно на код который грузит из БД.
    потому что я проверял на самом дохлом устройстве которое нашел (samsung duos или как-то так диагональ 3.2, оперативка 512 мб)
    и этот же список с загрузкой через инет картинок после продолжительного времени не закончил память на устройстве и вел себя корректно, без глюков
  2. Like
    zairkz отреагировална haword в Отображение в виде плиток   
    проблема не в том что битмапы не очищаются при очистке ListView, проблема при добавлении картинок в уже готовый список. Может конечно и дело в коде но код такой, при добавлении картинки если она не была загружена считываю картинку с БД, уменьшаю до маленького размера, делаю ListViewItem.Bitmap:=TBitmap.Create далее в него загружаю эту картинку и так далее. и при пролистывании около 100 картинок лезли глюки, даже если я не изменял количество итемов в ListView. Просто скролил вниз список. Было ощущение что где то лез out of memory и это вызывало глюки отображения. Пришлось ваять поток отдельный который будет бегать по списку добавленных ListViewItem и проверять видим ли он на экране, если нет то его Bitmap очищаю и из списка удаляю ListViewItem.
    Читал как это делается в андроиде, там классно сделали. При событии скрола есть параметры первый видимый итем, количество видимых, и общее количество итемов, а при изменении статуса скрола параметр указывающий на то что это, идет скролинг, начался или закончился. и от сюда куда удобнее получать видимость итемов и пихать в него картинки и удалять без бубнов . 
  3. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Отображение в виде плиток   
    было такое, решилось уничтожением созданных мною битмапов при очистке LV. а для родного Bitmap такого не должно быть. Хотя так сильно не тестил.
    будет время проверьте теорию:
    скройте родной Bitmap создайте TListItemImage в него загрузите картинку (предварительно уберите свои костыли) при очистке LV, сделайте сначала удаление TListItemImage procedure ClearLV(const aLV: TListView; aBitmapClear: boolean = false); var iBitmap: TListItemImage; begin if aLV.Items.Count = 0 then Exit; while aLV.Items.Count > 0 do begin if aBitmapClear then begin iBitmap := aLV.Items[0].Objects.FindDrawable('bitmap' + J.ToString) as TListItemImage; if Assigned(iBitmap) then begin iBitmap.Bitmap.Free; iBitmap.Bitmap := nil; end; end; aLV.Items.Delete(0); end; end;  
  4. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Отображение в виде плиток   
    обновленный апк 
    LVColumns.zip
  5. Like
    zairkz отреагировална noisy в Отображение в виде плиток   
    Прогнал оба варианта (от ZuBy и asviridenkov) на своем тестовом китайце Jiayu G3 2012 года выпуска. Android 4.1.2
    Визуально разницы не заметил. но с LVcolumns потребляет меньше процессора, но незначительно.
    А раз нет разницы, то разумно и дешевле использовать стандартные средства
  6. Like
  7. Like
    zairkz отреагировална #WAMACO в Отображение в виде плиток   
    Впечатляет! Вот бы еще сорцы от этого примера глянуть!
    Все понимаю, нет, так нет! Можно в личку!
  8. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Отображение в виде плиток   
    Можете показать ваш тест, на 500+ объектов. Хочу посмотреть скорость отрисовки ваших компонентов.
    Ничего мудрить не нужно, можете даже использовать мой файлик с данными и любую статическую картинку 
  9. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Отображение в виде плиток   
    LVColumns.zip
  10. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в GCMIntentService или Multiline Push and Local Notification   
    то о чем вы говорите, действует для локальных уведомлении.
    С пушами (те что генерит GCM) обстоит немного иначе, тут именно нужен java код и правки в классе который публикует нотификации.
    При реализации расширенных уведомлении, нужно будет библиотеку писать под каждый отдельный проект (что в принципе и правильно)
    А это решение универсальное, который даёт пользователям просматривать полный текст и разработчикам "свободу слова"
    это кстати так и работает,
    когда уведомление одно в шторке, оно показывается на полную, когда много любое можно раздвинуть и прочитать
  11. Like
    zairkz отреагировална Pax Beach в GCMIntentService или Multiline Push and Local Notification   
    Жалко, что смог только сейчас подключиться к теме.
    Спасибо большое за ваше решение!
    Если говорить о больших Notifications, хотелось бы не просто весь текст всех уведомлений читать на экране, а разворачивать только те, что заинтересовали. Т.е. сделать у себя расширяемые и управляемые (с кнопками) уведомления. И хотелось бы, делать это без импорта дополнительных JAVA классов, если уж Embarcadero предоставляет нам возможность делать мосты, а Android SDK содержит все необходимые классы.
    К сожалению, я завис на своем проекте, и не могу сейчас предоставить готовый PAS код. Но вот, с чего бы я начал в первую очередь:
    1. Взял пример работы с GSM из \Embarcadero\Studio\18.0\source\rtl\common\System.Android.Notification.pas;
    2. Использовал порт \Embarcadero\Studio\18.0\source\rtl\android\Androidapi.JNI.Support.pas или выдернул последний из SDK
    3. Изучил готовые примеры на Java, которые используют bigText и setAction;
    4. Сделал бы свой Unit (компоненты я не научился пока хорошо делать) для работы с Big Smart Notifications (название сам придумал).
     
    Удачи в этом. Ваши исследования очень полезны для нас.
     
  12. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в GCMIntentService или Multiline Push and Local Notification   
    несколько дней убили с Андреем (Andrey Efimov) на решение этой задачи
    За что ему большое спасибо, он доделал до рабочего варианта
    вот результат

    использовать fmx.zip
    скопировать fmx.dex.jar в папку с проектом далее по картинке компилируем и ждём пуш
  13. Like
    zairkz отреагировална Andrey Efimov в GCMIntentService или Multiline Push and Local Notification   
    У меня всё сработало, внёс одно изменение (не считая изменений в путях sdk)
    Не правильно обновляется, потому что вы разместили класс в неправильной папке
    com.embarcadero\rtl\notifications\NotificationPublisher.class Должно быть
    com\embarcadero\rtl\notifications\NotificationPublisher.class и соответственно папка embarcadero должна лежать в папке com.
  14. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в GCMIntentService или Multiline Push and Local Notification   
    вот батник на исполнение с генерацией classes.dex (в идеале)
    @echo off setlocal if x%ANDROID_SDK% == x set ANDROID_SDK="C:\Users\Public\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-sdk-windows" if x%JAVA% == x set JAVA="C:\Program Files\Java\jdk1.8.0_66\bin" set ANDROID_PLATFORM=%ANDROID_SDK%\platforms\android-23 set DX_LIB=%ANDROID_SDK%\build-tools\23.0.3\lib set EMBO_DEX="C:\Program Files (x86)\Embarcadero\Studio\17.0\lib\android\release\classes.dex" set FMX_JAR="C:\Program Files (x86)\Embarcadero\Studio\17.0\lib\android\release\fmx.jar" set PROJ_DIR=%CD% set VERBOSE=0 echo. echo COPY ORIGINAL fmx.jar copy %FMX_JAR% %PROJ_DIR%\fmx.jar" echo. echo UPDATE FILE NotificationPublisher.class %JAVA%\jar uf "fmx.jar" "com.embarcadero\rtl\notifications\NotificationPublisher.class" echo. echo CONVERTING FROM jar TO dex mkdir output\dex 2> nul if x%VERBOSE% == x1    SET VERBOSE_FLAG=--verbose call %DX_LIB%\dx.jar --dex %VERBOSE_FLAG% --output=%PROJ_DIR%\output\dex\test_classes.dex --positions=lines %PROJ_DIR%\fmx.jar echo. echo MERGING dex FILES echo.com.android.dx.merge.DexMerger java -cp %DX_LIB%\dx.jar com.android.dx.merge.DexMerger %PROJ_DIR%\output\dex\classes.dex %PROJ_DIR%\output\dex\test_classes.dex %EMBO_DEX% echo. del output\dex\test_classes.dex del output\jar\test_classes.jar rmdir output\jar echo. echo Now we have the end result, which is output\dex\classes.dex :Exit endlocal распаковать архив  проверить пути к java, android sdk, delphi что не работает: обновление JAR файла (с оригинальным fmx.jar все генерируется)
    directory.rar
  15. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в GCMIntentService или Multiline Push and Local Notification   
    java файл NotificationPublisher(java).rar class файл NotificationPublisher(class).rar fmx.jar файл переименован в rar fmx.jar.rar откомпилил файл вот так
    cls&javac -d "c:\users\ZuBy" "NotificationPublisher.java" -cp "android-19.jar";"android-support-v4.jar" потом просто заменил в jar архиве файл NotificationPublisher.class на новый (незнаю, правильно или нет)
    так делать не правильно, пробовал такой командой (источник)
    cls&jar uf fmx.jar "com.embarcadero\rtl\notifications\NotificationPublisher.class" ошибок не выдаёт, но файл имеет не правильную иерархию    а вот так должно быть 
    уже незнаю что делать
  16. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в TNotification с переносом строк   
    теперь можно сделать
    http://fire-monkey.ru/topic/2965-gcmintentservice-или-multiline-push-notification/#comment-17705
  17. Like
    zairkz отреагировална Pax Beach в Использование нативных LocalBroadcastManager и BroadcastReceiver   
    Из PlatformSDK (PlatformSDKs\android-sdk-windows\sources\android-23\android\support\v4\content\) портировал в Delphi класс TJLocalBroadcastManager.
    Это очень полезный класс, если вы не хотите рассылать сообщения по всей системе, а есть необходимость общаться только внутри приложения или между хост-приложением и сервисом.
    Во вложении сам класс, в своем приложении убедитесь, что в Target Platforms (Android) → Android → Libraries включена библиотека android-support-v4.dex.jar.
     
    Прилагаю пример, для изучения и использования в работе, который демонстрирует работу обычного BroadcastReceiver и LocalBroadcastReceiver.
    В примере демонстрируется работа сообщений в приложении и сервисе. Сначала делаем build проекта LBCRService, потом будет доступна возможность собрать LocalBCR.
    Собираю в Berlin 10.1, но на младших версиях тоже должно работать, по крайней мере в Seatlle.
     
    В реализации методов
    procedure RegisterReceiver(); procedure UnRegisterReceiver(); необходимо снять комментарий с соответствующих строчек, в зависимости от того, какой тип ресивера вы хотите использовать.
     
     
    Androidapi.JNI.LocalBroadcastManager.pas.zip
    LocalBroadCastReceiver.zip
  18. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Отображение в виде плиток   
    вот тест с 600 объектами, незнаю меня скорость устраивает
    для меня столько много конечно, так ради теста сделал
    lv_demo.zip
  19. Like
    zairkz отреагировална haword в Отображение в виде плиток   
    использовать плавающие панели с html текстом вместо прорисовки колонок это извращение. при этом хз как это все себя поведет при 500 панелей. ну и стоимость сего добра то же не малая. 
  20. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в TEdit первый символ   
    Не думаю что такое есть, но даже если есть это из Делфи не доступно. Обычно это опция клавиатуры
  21. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в StatusBar Color   
    function hasNavbar: Boolean; // uses Androidapi.JNI.Util, {$IFDEF ANDROID} var Window: JWindowExt; realSize: JPoint; screenSize: JPoint; metrics: JDisplayMetrics; difference, navBarHeight, resourceID: Integer; {$ENDIF} begin Result := false; {$IFDEF ANDROID} metrics := TJDisplayMetrics.Create; realSize := TJPoint.Create; screenSize := TJPoint.Create; Window := GetWindowExt; Window.getWindowManager.getDefaultDisplay.getRealMetrics(metrics); realSize.x := metrics.widthPixels; realSize.y := metrics.heightPixels; Window.getWindowManager.getDefaultDisplay.getSize(screenSize); if realSize.x <> screenSize.y then begin difference := realSize.y - screenSize.y; resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('navigation_bar_height'), StringToJString('dimen'), StringToJString('android')); if resourceID > 0 then navBarHeight := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID)); if navBarHeight > 0 then Result := difference = navBarHeight; end; {$ENDIF} end; вот проверьте
  22. Like
    zairkz отреагировална Satellite в StatusBar Color   
    Действительно работает, думаю, лучше использовать эту функцию. 
  23. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в StatusBar Color   
    обновленная версия
    StatusBarColor_update.zip
  24. Like
    zairkz отреагировална Satellite в StatusBar Color   
    Исправление проблемы с обновлением бара на Android 5.1:
    В настройках проекта выбираем No TitleBar:
    Project -> Options -> Version Info -> Theme: No TitleBar.
    Код события Onresize необходимо переместить в конец Onshow, т.к. в Onresize перестанет возвращаться высота бара. D:
    После выполнения этих действий, должно работать нормально на любом устройстве.
  25. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Отображение в виде плиток   
    Нет, там только TListItemText и TListItemImage. Просто визуально сделано так, как будто они лежат еще на чем то.
×
×
  • Создать...