Einzelnen Beitrag anzeigen

philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
890 Beiträge
 
Delphi 10.4 Sydney
 
#1

einfacher Waiting-Indicator für Android

  Alt 24. Jul 2020, 14:23
Hi,

ich versuche gerade einen ganz einfachen Waiting-Indicator für Android darzustellen. Unter Windows und MacOS ja ganz einfach, einfach crHourGlass bzw. crDefault anzeigen und gut ist, das funktioniert auch im MainThread. Unter iOS und Android ist es ja jetzt etwas schwieriger v.a. wenn man die eigentliche Operation im MainThread durchführt. Ein TAniIndicator bewegt sich da dann leider nicht.
Ich habe daher ein einfaches TImage genommen und ein Sandbox-Bild reingeladen (reicht mir aus, Hauptsache der User weiß, dass gerade etwas passiert).
Normalerweise ist dieses Image versteckt und wenn man etwas klickt, wird es an der Stelle des Klick/Tap angezeigt.

Klappt unter iOS wunderbar. Unter Android sehe ich aber nichts (auch nicht, wenn ich ein sleep(1000) einfüge).
Das es an sich an der richtigen Stelle platziert ist, weiß ich, weil ich in hideHourGlass das isVisible:=false mal auskommentiert habe und
dann sehe ich das Warten-Symbol an der Stelle der letzten Aktion, wo es eingeblendet wurde.

D.h. meine Frage ist, wie bekomme ich das Display unter Android aktualisiert?

Grüße, Philipp

Delphi-Quellcode:
procedure TicTrainerF.showHourglass(sender:TObject);
begin
  {$if defined(IOS) or defined(ANDROID)}
    if ((sender<>nil) and (sender is TControl)) then
    begin
      progressArc.Position:=(sender as TControl).Position;
      progressArc.Parent:=(sender as TControl).Parent;
    end else begin
      progressArc.Position.X:=50;
      progressArc.Position.Y:=50;
      progressArc.Parent:=self;
    end;
    progressArc.Visible:=true;
    progressArc.repaint();
    Application.ProcessMessages();
  {$ELSE}
    if (cs<>nil) then
      cs.SetCursor(crHourGlass);
  {$ENDIF}
end;

procedure TicTrainerF.hideHourglass();
begin
  {$if defined(IOS) or defined(ANDROID)}
    progressArc.Visible:=false;
  {$ELSE}
    if (cs<>nil) then
      cs.SetCursor(crDefault);
  {$ENDIF}
end;
  Mit Zitat antworten Zitat