Einzelnen Beitrag anzeigen

AndyDF

Registriert seit: 6. Sep 2006
Ort: Allgäu
99 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Android Listview mit Bitmap

  Alt 17. Mär 2016, 15:11
Ich habe mir deinen Code nochmal angesehen. Also ich habe überhaupt keine Probleme mit iOS oder Android. Unter Windows schaut es manchmal nicht so aus wie ich es gerne hätte. Aber das ist in diesem Fall bei mir auch keine Zielplattform. iOS u. Android passt perfekt.

Zu Styles: Für meinen Fall muss ich ehrlich sagen, fahre ich auf diese Weise sehr gut. Da meine Oberfläche recht flexibel sein muss kann ich hier ganz gut reagieren.

Letztendlich mache ich nichts anderes als in "TFrmOverview.lvUpdateObjects" das Item zu "designen" und in einer eigenen Methode "DataToGui" das Item zu befüllen. Das funktioniert bei mir.

Ein paar Hinweise, die mir als Unterschiede auffallen:

- "TFrmOverview.lvUpdateObjects" mach immer das Selbe bei mir! Das Bitmap wird nicht in dieser Methode gesetzt. Wenn ich das Bild dann später nicht sehen will, setze ich .Visible auf false (in DataToGui). Bzw. ich weise gar kein TBitmap zu. Wenn das Objekt nil bleibt ist nichts zu sehen.
- Atem.Invalidate -> wofür?
- Die Reihenfolge in "TFrmOverview.lvUpdateObjects" ist entscheidend! In dieser Reihenfolge wird es übereinander gezeichnet.
- je nachdem woher du das Bild bekommst, musst du "OwnsBitmap" entsprechen setzen. Aber das machst du ja schon.
- ListView.ItemAppearance.ItemAppearance ist bei mir auf Custom. ItemHeight ist auch passend gesetzt.
- Ja das ist richtig, die standard Properties .Text / .Image werden immer noch angezeigt. Hierzu habe ich im Eigenschaftenexplorer alle auf Visible := false gesetzt! Die bleiben dann bei mir einfach unbeachtet, da ich das Item komplett selbst aufbaue.
- Für die Positionierung auch unbedingt ListView.ItemSpaces berücksichtigen! Meiner Erfahrung nach muss der Wert für Top und Bottom sogar in der ItemHeight mit einbezogen werden.

Hier noch meine Methode zum Setzen des Bitmaps (aus DataToGui() heraus):

Delphi-Quellcode:
class procedure TListViewHelper.SetListItemImage(const AListItem: TListViewItem; const ADrawableName: String; const ABitmap: TBitmap; const AOwnsBitmap: Boolean);
var
  Drawable: TListItemDrawable;
begin
  if Assigned(AListItem) then
  begin
    Drawable := AListItem.Objects.FindDrawable(ADrawableName);

    if Assigned(Drawable) and (Drawable is TListItemImage) then
    begin
      (Drawable as TListItemImage).BeginUpdate;
      try
        (Drawable as TListItemImage).Bitmap := nil;
        (Drawable as TListItemImage).OwnsBitmap := AOwnsBitmap;
        (Drawable as TListItemImage).Bitmap := ABitmap;
      finally
        (Drawable as TListItemImage).EndUpdate;
      end;
    end;
  end;
end;
Ab jetzt nehme ich die Delphi Tags
Andreas Blenk
  Mit Zitat antworten Zitat