antarey
-
Постов
284 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Сообщения, опубликованные antarey
-
-
Пишется кроссплатформенное приложение винда/андроид с использованием SQLite
На десктопе будет своя база, на мобильной платформе своя
Необходимо реализовать синхронизацию
Андроид через WiFi подключается к локальной сети, все пингуется
Как с винды подключиться к андроид базе и наоборот?
-
Возможно ли вообще такое:
- создать условие динамически и как ?
- знак условия && или || подставить как переменную?
Задача какая - выполнить определенное действие - берется из базы, к примеру запустить программу, в зависимости от определенных условий - тоже из базы, к примеру надо проверить значение ветки реестра и наличие файла/каталога , - то есть надо в динамике создать условие типа такого
if (reg->ValueExists("......") переменная условия FileExists(".......") переменная условия ...... )
ну и желательно выполнить .
Или может есть какой то другой вариант выполнения задачи
Заранее благодарен
-
Понятно. В принципе я сделал анимацию Folding Paper - но с одним приколчиком - анимируется не дочерний контрол а родитель, грубо говоря фон, прикольно но не то что надо. Я приглашал народ к сотрудничеству, но чет желающих не нашлось.
-
Немного уточняю - я пишу нативный андроид компонент - наследник RelativeLayout
Как дочерний компонент кидаю на него TListBox
Или как раз затык в невозможности рад студии передать дочерний элемент View child = getChildAt(0); ?
-
Подскажите, как определить какая именно ошибка при выполнении приложения
При загрузке приложения
DDMS выдает
07-25 04:18:59.324: E/AndroidRuntime(2129): at com.antarey.antnative.FoldingLayout.onMeasure(FoldingLayout.java:150)
вот этот код
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { View child = getChildAt(0); super.measureChild(child,widthMeasureSpec, heightMeasureSpec); super.setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); }
ругается на строку
super.measureChild(child,widthMeasureSpec, heightMeasureSpec);
А почему именно - как определить????
-
Как уже не раз обсуждалось на форуме - анимация средствами FMX под андроид задача неблагодарная. Перечитав много чего, и на основании D.P.F Delphi Android Native Components и
DevBytes: Folding Layout решил сварганить компонент для нативной анимации.
Дабы не делать тему не читабельной - сам проект в атаче , проблема в следующем :
при компиляции под андроид есть ряд ошибок
[DCC Error] Ant.Android.JFoldingLayout.pas(119): E2064 Left side cannot be assigned to[DCC Error] Ant.Android.JFoldingLayout.pas(120): E2010 Incompatible types: 'TGUID' and 'JViewGroup_LayoutParams'[DCC Error] Ant.Android.JFoldingLayout.pas(122): E2010 Incompatible types: 'JViewGroup_LayoutParams' and 'TGUID'[DCC Error] Ant.Android.JFoldingLayout.pas(169): E2018 Record, object or class type required[DCC Error] Ant.Android.JFoldingLayout.pas(172): E2018 Record, object or class type required[DCC Error] Ant.Android.JFoldingLayout.pas(175): E2018 Record, object or class type required[DCC Error] Ant.Android.JFoldingLayout.pas(177): E2018 Record, object or class type required[DCC Error] Ant.Android.JFoldingLayout.pas(179): E2250 There is no overloaded version of 'CallInUIThread' that can be called with these arguments[DCC Fatal Error] Ant.Android.Reg.pas(13): F2063 Could not compile used unit 'Ant.Android.JFoldingLayout.pas'constructor TAntJFoldingLayout.Create(AOwner: TComponent); begin inherited Create(AOwner); ControlCaption := 'FoldingLayout'; BackgroundColor1 := TAlphaColors.Lightsteelblue; Visible := True; FForm := nil; {$IFDEF ANDROID} CallInUIThreadAndWaitFinishing( procedure() begin 119 JViewGroup_LayoutParams := TJViewGroup_LayoutParams.JavaClass.init 120 (Integer(LayoutWidth), Integer(LayoutHeight)); 121 FJFoldingLayout := TJFoldingLayout.JavaClass.init(SharedActivity); 122 FJFoldingLayout.setLayoutParams(JViewGroup_LayoutParams); JControl := FJFoldingLayout; end); {$ENDIF} end;
// ------------------------------------------------------------------------------ procedure TAntJFoldingLayout.Resize; begin {$IFDEF ANDROID} if IsAutoResize then begin CallInUIThread( procedure() begin FJFoldingLayout.setX(Position.x * ScreenScale); FJFoldingLayout.setY(Position.y * ScreenScale); if LayoutWidth <> lpNone then 169 JViewGroup_LayoutParams.Width := Integer(LayoutWidth) else 172 JViewGroup_LayoutParams.Width := round(Width * ScreenScale); if LayoutHeight <> lpNone then 175 JViewGroup_LayoutParams.Height := Integer(LayoutHeight) else 177 JViewGroup_LayoutParams.Height := round(Height * ScreenScale); end); end else inherited; {$ELSE} inherited; {$ENDIF} end; // ------------------------------------------------------------------------------
Если JViewGroup_LayoutParams заменить на JRelativeLayout_LayoutParams то компилится, но самописный класс FoldingLayout наследник ViewGroup и по моему так будет не правильно
Код ява проверен на Андроид студии - рабочий.
Может кто упростит проект, усовершенствует и тд.
Приглашаю всех к сотрудничеству - думаю такой компонент никому не помешает, тем более при желании на яве можно будет дописать любую анимацию
-
Итак, вот результат моих потуг
antareyToast.java
package com.antarey; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.widget.Toast; public class antareyToast { private Context context; private Handler mHandler = new Handler(Looper.getMainLooper()); private String mMsg; public antareyToast(Context context) { this.context = context; } public void ShowToast(String msg) { mMsg = msg; mHandler.post(new Runnable() { public void run() { Toast.makeText(context, mMsg, Toast.LENGTH_SHORT).show(); } }); } }
обертка
unit com.antarey.antareyToast; interface uses FMX.Helpers.Android, Androidapi.Helpers, AndroidAPI.JNIBridge, Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.os; type JantareyToast = interface; JantareyToastClass = interface(JObjectClass) ['{C4BED43A-7A25-43F2-A9BE-B2E1602FB2D8}'] function init(JContextparam0 : JContext) : JantareyToast; cdecl; end; [JavaSignature('com/antarey/antareyToast')] JantareyToast = interface(JObject) ['{5AFABA34-5223-424D-A381-5F61E4B67B53}'] procedure ShowToast(JStringparam0 : JString) ; cdecl; end; TJantareyToast = class(TJavaGenericImport<JantareyToastClass, JantareyToast>) end; procedure ShowToast(ToastMsg: String); implementation procedure ShowToast(ToastMsg: String); var Activity:JantareyToast; begin Activity:= TJantareyToast.JavaClass.init(SharedActivityContext); Activity.ShowToast(StringToJString(ToastMsg)); end; procedure RegisterTypes; begin TRegTypes.RegisterType('com.antarey.antareyToast',TypeInfo(com.antarey.antareyToast.JantareyToast)); end; initialization RegisterTypes; end.
вызов
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ShowToast( UnicodeString(_D("Ура!!!! - Получилось")) ); } //---------------------------------------------------------------------------
Все работает.
Более подробно читаем тут
Но ето только один из методов, использовать стандартные библиотеки немного проще, проще в том что не надо писать ява код самому, а обертки есть уже готовые
-
вот все сначала, с исправлениями
ява
AntareyAnimation.java
package com.antarey; import android.content.Context; import android.widget.Toast; public class AntareyAnimation { private Context context; public AntareyAnimation(Context context){ this.context=context; } public void Rotate3D() { Toast zxczx = Toast.makeText(context, "Привет", Toast.LENGTH_SHORT); } }
вот обертка
unit com.antarey.AntareyAnimation; interface uses AndroidAPI.JNIBridge, AndroidAPI.JNI.JavaTypes, AndroidAPI.JNI.GraphicsContentViewText; type JAntareyAnimation = interface; JAntareyAnimationClass = interface(JObjectClass) ['{1E982F9C-B857-44C1-BCCF-383C25E2CDD1}'] function init(JContextparam0: JContext): JAntareyAnimation; cdecl; // (Landroid/content/Context;)V A: $1 procedure Rotate3D; cdecl; // ()V A: $1 end; [JavaSignature('com/antarey/AntareyAnimation')] JAntareyAnimation = interface(JObject) ['{57391557-8D42-4A20-8B2C-F67157CE6899}'] procedure Rotate3D; cdecl; // ()V A: $1 end; TJAntareyAnimation = class(TJavaGenericImport<JAntareyAnimationClass, JAntareyAnimation>) end; implementation procedure RegisterTypes; begin TRegTypes.RegisterType('com.antarey.AntareyAnimation', TypeInfo(com.antarey.AntareyAnimation.JAntareyAnimation)); end; initialization RegisterTypes; end.
вот вызов
procedure TForm1.Button1Click(Sender: TObject); var Animation: JAntareyAnimation; begin com.antarey.AntareyAnimation.TJAntareyAnimation.JavaClass.init(MainActivity); Animation := TJAntareyAnimation.Create; Animation.Rotate3D; end;
На устройстве - access violation ????
-
Да ето я уже исправил.
Просто не совсем понятно в обертке
что прописывать в
JAntareyAnimationClass = interface(JObjectClass) ['{2B5A2F93-3AA1-4415-9AB4-033A08EDE51A}'] function init(JContextparam0 : JContext) : JAntareyAnimation; cdecl; procedure Rotate3D ; cdecl; end;
а что в
[JavaSignature('com/antarey/AntareyAnimation')] JAntareyAnimation = interface(JObject) ['{9F7DE253-EBD7-4D7C-B058-D803C7CCBF2F}'] end;
а если точнее , то где именно объявить мою ява процедуру Rotate3D
-
По вашему п.№2
вызов
var Animation: JAntareyAnimation; begin Animation := TJAntareyAnimation.Create; Animation.Rotate3D; end;
или не верный вызов или обертка
ошибка в
Animation.Rotate3D;
-
Я хочу использовать Toast для уведомления, но для создания объекта уведомления в Java используется следующий код:
Toast toast= Toast.makeText(context, "Привет", Toast.LENGTH_SHORT);
Как в Delphi вызвать метод Java объекта?
-
сам не вижу, у меня обертка еще не доделана
вот вызов
procedure TfrmMainPas.Button1Click(Sender: TObject); begin Rotate3D(); end; end.
Вот переделанная обертка с Вашими рекомендациями , но так понимаю еще не доделанная,
unit com.antarey.AntareyAnimation; interface uses AndroidAPI.JNIBridge, Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText; type JAntareyAnimation = interface; JAntareyAnimationClass = interface(JObjectClass) ['{2B5A2F93-3AA1-4415-9AB4-033A08EDE51A}'] function init(JContextparam0 : JContext) : JAntareyAnimation; cdecl; // (Landroid/content/Context;)V A: $1 procedure Rotate3D ; cdecl; // ()V A: $1 end; [JavaSignature('com/antarey/AntareyAnimation')] JAntareyAnimation = interface(JObject) ['{9F7DE253-EBD7-4D7C-B058-D803C7CCBF2F}'] end; TJAntareyAnimation = class(TJavaGenericImport<JAntareyAnimationClass, JAntareyAnimation>) end; implementation procedure Rotate3D(); begin // CallInUIThread( // procedure() // begin Rotate3D(); // end); end; procedure RegisterTypes; begin TRegTypes.RegisterType('com.antarey.AntareyAnimation', TypeInfo(com.antarey.AntareyAnimation.JAntareyAnimation)); end; initialization RegisterTypes; end.
плюс проблемы с вызовом
procedure TForm1.Button1Click(Sender: TObject); begin com.antarey.AntareyAnimation.TJAntareyAnimation.JavaClass.Rotate3D; end;
но скорее всего ето не правильно
-
Понял, огромное спасибо.
-
При написании обертки для ява кода необходимо связать делфи интерфейс и ява класс
JAntareyAnimationClass = interface(JFMXNativeActivityClass) ['{3FC48462-87FD-4F6C-9B15-02BC09D67168}'] function init(context: JContext): JAntareyAnimation; cdecl; // function init: JAntareyAnimation; cdecl; end; [JavaSignature('com/antarey/AntareyAnimation')] JAntareyAnimation = interface(JFMXNativeActivity) ['{38A1F738-CDE7-46F6-AA07-5A453A3AC0B2}'] procedure Rotate3D(); cdecl; end;
илиJToastClass = interface(JObjectClass) ['{69E2D233-B9D3-4F3E-B882-474C8E1D50E9}'] {Property methods} function _GetLENGTH_LONG: Integer; cdecl; function _GetLENGTH_SHORT: Integer; cdecl; {Methods} function init(context: JContext): JToast; cdecl; overload; function makeText(context: JContext; text: JCharSequence; duration: Integer): JToast; cdecl; {Properties} property LENGTH_LONG: Integer read _GetLENGTH_LONG; property LENGTH_SHORT: Integer read _GetLENGTH_SHORT; end; [JavaSignature('android/widget/Toast')] JToast = interface(JObject) ['{FD81CC32-BFBC-4838-8893-9DD01DE47B00}'] {Methods} procedure cancel; cdecl; function getDuration: Integer; cdecl; function getGravity: Integer; cdecl; function getHorizontalMargin: Single; cdecl; function getVerticalMargin: Single; cdecl; function getView: JView; cdecl; function getXOffset: Integer; cdecl; function getYOffset: Integer; cdecl; procedure setDuration(value: Integer); cdecl; procedure setGravity(gravity, xOffset, yOffset: Integer); cdecl; procedure setMargin(horizontalMargin, verticalMargin: Single); cdecl; procedure setText(s: JCharSequence); cdecl; procedure setView(view: JView); cdecl; procedure show; cdecl; end;
как определить ету связь - исходя из чего
Спасибо
-
И на етом спасибо
Только насколько я понял в андроиде View-ом может выступать любой контрол. По крайней мере одну анимацию я проверял как для лайота так и для бутона - работает.
Вот и думал , что по аналогии любому контролу FMX можно передать анимацию андроида.
Ето не в ету тему, больше сюда Как в Firemonkey на C++Builder использовать ява код?
но я пытаюсь реализовать, то что уже реализовано D.P.F Delphi Android Native Components - там есть DPF.Android.JAnimation, который реализует android.view.animation.Animation
и как раз в ява процедуру startTranslateAnimation передается TDPFANDBaseControl наследник TControl
-
Так, вот мои мучения
Ява код - на андроид студии работает 100%
package com.antareyanimation; import android.content.Context; import android.widget.Toast; public class AntareyAnimation { private Context context; public AntareyAnimation(Context context){ this.context=context; } public void Rotate3D() { Toast zxczx = Toast.makeText(context, "Привет", Toast.LENGTH_SHORT); } }
вот батник для получения декс
cls @echo off echo. echo del old dex if exist if exist .\classes.dex (del .\classes.dex) echo. setlocal if x%ANDROID% == x set ANDROID="c:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk" set ANDROID_PLATFORM=%ANDROID%\platforms\android-19 set DX_LIB=%ANDROID%\build-tools\19.1.0\lib set DX_PATH=%ANDROID%\build-tools\19.1.0 set EMBO_DEX="c:\Program Files (x86)\Embarcadero\Studio\14.0\lib\android\debug\classes.dex" set PROJ_DIR=%CD% set VERBOSE=0 set javaPath="c:\Program Files\Java\jdk1.7.0_51\bin" echo. echo Compiling the Java Sources echo. mkdir output 2> nul mkdir output\classes 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=-verbose %javaPath%\javac -source 1.6 -target 1.6 %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes src\com\animation\AntareyAnimation.java echo. echo Creating jar containing the new classes echo. mkdir output\jar 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=v %javaPath%\jar c%VERBOSE_FLAG%f output\jar\test_classes.jar -C output\classes com echo. echo Converting from jar to dex... echo. 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%\output\jar\test_classes.jar echo. echo Merging dex files echo. %javaPath%\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 Finished Merging copy output\dex\classes.dex .\classes.dex rd .\output /s /q
вот обертка для ява кода
unit Antarey.Android.JAnimation; interface uses Androidapi.JNI.GraphicsContentViewText, FMX.Platform.Android, FMX.Helpers.Android, FMX.Controls, Androidapi.JNIBridge, Androidapi.JNI.JavaTypes; {$IFDEF ANDROID} type JAntareyAnimation = interface; // ---------------------------------------------------------------------------- // JAntareyAnimation // ---------------------------------------------------------------------------- JAntareyAnimationClass = interface(JObjectClass) ['{3FC48462-87FD-4F6C-9B15-02BC09D67168}'] function init(context: JContext): JAntareyAnimation; cdecl; end; [JavaSignature('com/animation/AntareyAnimation')] JAntareyAnimation = interface(JObject) ['{38A1F738-CDE7-46F6-AA07-5A453A3AC0B2}'] procedure Rotate3D(); cdecl; end; TAntareyAnimation = class(TJavaGenericImport<JAntareyAnimationClass, JAntareyAnimation>) end; procedure Rotate3D(); {$ENDIF} implementation {$IFDEF ANDROID} procedure Rotate3D(); begin CallInUIThread( procedure() begin Rotate3D(); end); end; {$ENDIF} end.
ну и сама програмулина
unit _frmMainPas; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects, Antarey.Android.JAnimation, FMX.Helpers.Android, FMX.StdCtrls; type TfrmMainPas = class(TForm) Button1: TButton; Image1: TImage; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmMainPas: TfrmMainPas; implementation {$R *.fmx} procedure TfrmMainPas.Button1Click(Sender: TObject); begin Rotate3D(); end; end.
все компилируется - запускается - но не кликается - вот что получаю
и
Где я напортачил??
-
Вопрос к чему - так как анимация на андроиде встроенными средствами жуть полная - делается довольно легко - но работает если на форме одна кнопка - и тормозит просто жуть(тут на форуме , да и Андрей пример выкладывал есть реализация выдвижной боковой панели - если сама панель - работает отлично - киньте десяток компонентов - получим такой тормоз - вроде там время анимации не 2 с. а 2 мин. ), - может если для анимации
использовать андроидовский апи то будет получше. Обертку по аналогии думаю напишу - а вот как спаровать носорога с бегемотом пока не выяснил
-
В андроид апи в классе android.view.View есть процедура public void startAnimation (Animation animation)
Если написать обертку для android.view.animation.Animation можно передать startAnimation (Animation animation) в TControl и главное как?
чтобы получилось как на яве
mView1.startAnimation(anim);
-
Andrey Yefimov, с первым вопросом ясно спасибо
-
Ладно, как написать ява обертку на С++ пока отложим и пойдем другим путем.
Если писать обертку для ява кода на делфи и подключить ее к С++ - возникает два вопроса:
1. откуда брать циферки/буковки ?
= interface( JObjectClass ) ['{F645A7A7-3737-4F4E-8848-9C54FBA00284}']
2. в обертке надо описывать не только свой класс но и все классы импорта в ява кода ?
import android.graphics.Bitmap; import android.graphics.Camera; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Shader; import android.os.Build; import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation;
Ярослав, просьба не пинать за возможное нарушения правил о двух вопросах в одном посте - они неотъемлемая часть моего вопроса
Спасибо
-
Перерыл много форумов но так толком ничего и не нашел .
Я написал ява код используя класс Animation для реализации анимации слайда и 3D вращения. Код проверил на Android Studio - работает
Скомпилировал свой dex и объединил его с classes.dex студии - забросил в деплоймент
Это было самое легкое.
Дальше в упор не могу понять - и найти статьи о том как использовать свои ява процедуры
Буду всем очень признателен за помощь
Когда разберусь с подключением ява кода - думаю можно будет организовать что-то типа копилки реализации анимаций. Со слайдами и 3д переворотом вроде разобрался - на очереди folding но с ним пока проблемы - как его юзать в Android Studio разобрался - а вот как сделать код пригодным для студии пока нет
Ярослав , очень сильно надеюсь на Вашу помощь - статей/примеров для С++ вообще нету - даже не знаю с чего начать
Всем заранее спасибо
-
Подскажите, почему при использовании анимации на андроиде она безбожно тормозит.
TFloatAnimation или AnimateFloat или ChangeTabAction на Виндовс отрабатывается плавно и без тормозов - ета же анимация но на андроиде
выполняется заметно медленнее и не соответствует установленной скорости
анимация
FContainer->AnimateFloat("Position.Z", TrackBarAnimDepth->Value,TrackBarAnimSpeed->Value); FContainer->AnimateFloatDelay("Position.Z", 0,TrackBarAnimSpeed->Value, 1); FContainer->AnimateFloatWait(APropertyName, 360,TrackBarAnimSpeed->Value, TAnimationType::InOut);
зачастую на андроиде не прорисовывается
-
Отвечу сам себе (Builder C++):
(char)64
-
Как в андроид получить код символа и наоборот, желательно совместимый код с виндой
Диалог выбора каталога
в Прочие вопросы
Опубликовано
Не знаю стоит ли разбивать на две темы - фактически вопрос для двух платформ.
Ярослав - если скажете разобью
Андроид устройство через WiFi подключается в локальную сеть
Задача № 1.
С андроид устройства прочитать список компов - выбрать нужный-прочитать список дисков-выбрать диск-выбрать каталог
Задача №2
С компьютера подключиться к андроид устройству и далее как и выше - прочитать список дисков-выбрать диск-выбрать каталог