German Größe von ImageView ändern

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

ich zeige auf einem abgedunkelten Hintergrund ein JPG-Bild in einem ImageView an.
Die Bilder haben eine unterschiedlich Größe, die App läuft immer im portrait-Format.

Ich möchte die Bilder so anzeigen, dass unabhängfig von der Ausgangsgröße die maximale Breite oder Höhe 96%x sind. Kleinere Bilder sollen entsprechend vergrößert, größere verkleinert werden.

Das Anzeigen in der Orginalgröße klappt problemlos, aber wie skaliere ich die Bilder?
B4X:
Sub btnCV_Click   'jpg-Datei anzeigen
  '
  PnlBlack.Initialize("PnlBlack")
  Dim bgnd As ColorDrawable
  bgnd.Initialize( Colors.ARGB(155,0,0,0),0)
  PnlBlack.Background = bgnd
  Activity.AddView(PnlBlack, 0, 0, 100%x, 100%y)    
  '   
  ImageView1.Initialize("img1")
  ImageView1.Bitmap = LoadBitmap(AppDir & "/Daten",jpgDatei)
  ImageView1.Gravity = Gravity.TOP
  PnlBlack.AddView(ImageView1,2%x,15%y,96%x,96%x)  
  '   
End Sub
 

DonManfred

Expert
Licensed User
Longtime User
du kannst diese library ausprobieren, wenn Du magst. (bist der erste... Hab die lib noch ncicht veröffentlicht :D)

Aktuell funktioniert die allerdings NUR mit Imageviews

Vorgehensweise:
Kopiere die folgenden Dateien in deinen Additional libraries Ordner:
- uil.jar
- uil.xml
- universal-image-loader-1.9.3.jar

Den Rest musst du dir aus dem Beispiel zusammensuchen

ganz grob:
B4X:
Sub Globals
    Dim il As uil

B4X:
Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("Layout1")
    il.Initialize("uil")

B4X:
    'Acceptable URIs examples
    '"http://site.com/image.png" // from Web
    '"file:///mnt/sdcard/image.png" // from SD card
    '"file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)
    '"content://media/external/images/media/13" // from content provider
    '"content://media/external/video/media/13" // from content provider (video thumbnail)
    '"assets://image.png" // from assets
    '"drawable://" + R.drawable.img // from drawables (non-9patch images)
    il.loadImg("http://snapshots.basic4android.de/IconButton001.png",ImageView1)

Im grunde musst Du nur dafür sorgen das das Imageview an der richtigen Stelle und größe ist. Die Lib sollte sich selbstständig um die richtige skalierung kümmern.
 

Attachments

  • libUIL.zip
    158.3 KB · Views: 223
Last edited:

peternmb

Well-Known Member
Licensed User
Longtime User
DAs mit der Lib habe ich nicht hinbekommen, es kommt keine Fehlermeldung aber auch kein Bild.
Ich habe aber einen Codeschnipsel von Klaus gefunden, der das perfekt macht:
B4X:
Sub FitCenterBitmap(Imv As ImageView, Dir As String, FileName As String)
    Private bmp As Bitmap = LoadBitmap(Dir, FileName)
    Private cvs As Canvas
    cvs.Initialize(Imv)
    Dim rectDest As Rect
    Dim delta As Int
    If bmp.Width / bmp.Height > Imv.Width / Imv.Height Then
        delta = (Imv.Height - bmp.Height / bmp.Width * Imv.Width) / 2
        rectDest.Initialize(0, delta,Imv.Width, Imv.Height - delta)
        Else
        delta = (Imv.Width - bmp.Width / bmp.Height * Imv.Height) / 2
        rectDest.Initialize(delta, 0, Imv.Width - delta, Imv.Height)
        End If
        cvs.DrawBitmap(bmp, Null, rectDest)
    Imv.Gravity = Gravity.TOP
    Imv.Invalidate
End Sub

Nur das scheint noch nicht zu funktionieren, mein Bild wird nicht oben ausgerichtet:
B4X:
Imv.Gravity = Gravity.TOP
 
Top