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

Реализация нативной анимации Андроид


antarey

Вопрос

Как уже не раз обсуждалось на форуме - анимация средствами 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 и по моему так будет не правильно

Код ява проверен на Андроид студии - рабочий.

 

Может кто упростит проект, усовершенствует и тд.

 

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

 

 

FoldingLayout.zip

Ссылка на комментарий

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

Ответов пока нет

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

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