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
du kannst diese library ausprobieren, wenn Du magst. (bist der erste... Hab die lib noch ncicht veröffentlicht )
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.
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: