Autore Topic: Ridimensionamento immagine  (Letto 1239 volte)

Offline gabric

  • Utente senior
  • ****
  • Post: 613
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Ridimensionamento immagine
« il: 19 Giugno 2013, 12:41:09 CEST »
0
Salve!!
Vi espongo il mio problema
io ho una list view popolata dinamicamente da un file json

questo è il layout del singolo elemento

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content" >

    <ImageView
       android:id="@+id/imageView2"
       android:layout_width="wrap_content"
       android:layout_height="110dp"
       android:layout_alignParentRight="true"
       android:layout_alignParentTop="true"
       android:scaleType="fitCenter"
       android:src="@drawable/img_canzone" />

    <ImageView
       android:id="@+id/imageView1"
       android:layout_width="wrap_content"
       android:layout_height="120dp"
       android:layout_alignBottom="@+id/imageView2"
       android:layout_alignParentRight="true"
       android:layout_alignParentTop="true"
       android:scaleType="fitXY"
       android:src="@drawable/box_testo" />

    <TextView
       android:id="@+id/textView2"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignLeft="@+id/textView1"
       android:layout_below="@+id/textView1"
       android:text="Nome artista"
       android:textColor="#FFFFFFFF"
       android:textAppearance="?android:attr/textAppearanceMedium"
       android:textStyle="italic" />

    <TextView
       android:id="@+id/textView3"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignLeft="@+id/textView2"
       android:layout_below="@+id/textView2"
       android:layout_marginTop="13dp"
       android:text="Genere"
       android:textColor="#FFFFFFFF"
       android:textAppearance="?android:attr/textAppearanceMedium"
       android:textStyle="bold" />

    <TextView
       android:id="@+id/textView4"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignLeft="@+id/textView3"
       android:layout_below="@+id/textView3"
       android:text="Difficoltà"
       android:textColor="#FFFFFFFF"
       android:textAppearance="?android:attr/textAppearanceMedium"
       android:textStyle="bold" />

    <ImageView
       android:id="@+id/imageView3"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentRight="true"
       android:layout_alignParentTop="true"
       android:layout_marginRight="18dp"
       android:scaleType="fitEnd"
       android:src="@drawable/free" />

    <TextView
       android:id="@+id/imageView4"
       android:layout_width="55dp"
       android:layout_height="55dp"
       android:layout_alignRight="@+id/imageView3"
       android:layout_below="@+id/textView1"
       android:background="@drawable/ellisse"
       android:gravity="center"
       android:text="€ 0.89"
       android:textAppearance="?android:attr/textAppearanceMedium"
       android:textColor="#FF000000" />

    <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
       android:layout_alignLeft="@+id/imageView1"
       android:layout_marginLeft="5dp"
       android:layout_marginTop="5dp"
       android:text="Titolo Canzone"
       android:textAppearance="?android:attr/textAppearanceLarge"
       android:textColor="#FFFFFFFF"
       android:textStyle="bold" />

</RelativeLayout>
(l'altezza delle img view è messo staticamente perchè  ho definito i layout per tutte le risoluzioni, così da mantenere le proporzioni)

l'immagine tecnicamente dovrebbe prendere tutto lo spazio che ha a disposizione (cosa che succede nell'emulatore)
solo che quando avvio il programma, l'immagine si vede molto, molto più piccola (vedi screen)
idee del perchè?
il file json viene popolato in modo asincrono, quindi per un secondo vedo l'img del layout, e quella è delle giuste dimenzioni

edit: aumentando le dimensioni del file in input si vede più grande anche nella lista... uhm e come lo faccio ingrandire quello piccolo? (anche se sgrana non importa)
« Ultima modifica: 20 Giugno 2013, 16:19:52 CEST da Nicola_D »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Ridimenzonamento immagine
« Risposta #1 il: 19 Giugno 2013, 14:17:30 CEST »
0
non ho capito granche di quel che hai detto (tipo quali immagini che nel layout ce ne sono tante), per emulatore intendi l'editor visuale di layout o un AVD?
Cosa vuoi ottenere, ossia quale immagine deve essere come?
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Ridimenzonamento immagine
« Risposta #2 il: 19 Giugno 2013, 14:31:15 CEST »
0
Imposta lo scaleType della imageview a fitXY
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline gabric

  • Utente senior
  • ****
  • Post: 613
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Ridimenzonamento immagine
« Risposta #3 il: 19 Giugno 2013, 22:13:28 CEST »
0
se impoosto lo scale type a fit xy naturalmente la storpia, invece a me serve ceh mantenga le proporzioni.
comunque ho risolto inserendo come risorse dei file con dimenzioni maggiore. solo che ora motlo spesso esaurisce la memoria

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Ridimenzonamento immagine
« Risposta #4 il: 19 Giugno 2013, 23:51:52 CEST »
0
se impoosto lo scale type a fit xy naturalmente la storpia, invece a me serve ceh mantenga le proporzioni.
comunque ho risolto inserendo come risorse dei file con dimenzioni maggiore. solo che ora motlo spesso esaurisce la memoria
USA le 9patch, altrimenti é ovvio che le storpia. Oppure USA fitx o city, fai delle prove

Inviato dal mio Nexus 7 con Tapatalk 2
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline gabric

  • Utente senior
  • ****
  • Post: 613
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Ridimenzonamento immagine
« Risposta #5 il: 20 Giugno 2013, 09:32:51 CEST »
0
non posso usare le 9 patch perchè le immagini le prendo da un browser, non so mai come sono, e sopratutto, non contengono pixel che possono esser duplicati senza storpiare l'immagine (nemmeno lungo la cornice)
cos'è city?

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Ridimenzonamento immagine
« Risposta #6 il: 20 Giugno 2013, 09:43:06 CEST »
0
era fity, ho perso la correzione della tastiera...

qui ImageView.ScaleType | Android Developers
trovi tutti gli scaletype che hai.
Sinceramente non ho ancora capito come vuoi l'immagine,ma posso immaginare che la vuoi come sfondo che occupi il maggior spazio possibile ma senza perdere l'aspect size.
in tal caso usa CENTER_INSIDE se vuoi che riempia il più possibile (ma se il ratio è diverso dallo spazio hai buchi) o CENTER_CROP se vuoi che l'immagine occupi tutto lo spazio (ma venga tagliata se il ratio è diverso).

Fai delle prove
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline gabric

  • Utente senior
  • ****
  • Post: 613
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Ridimenzonamento immagine
« Risposta #7 il: 20 Giugno 2013, 09:49:46 CEST »
0
Esattamente, l'immagine dietro deve occupare la maggior parte di spazio possibile, (nello screen è corretto quella grande, non l'altra)
il problema è che impostando center, o center inside, se l'immagine è a bassa risoluzione, la rimpicciolisce lasciando degli spazi vuoti attorno (e il riquadro grigio, che è agganciato (align left right and top) all'img di sfondo, resta grande)
viceversa, se l'immagine è ad alta risoluzione, non riesce a caricarle tutte, e non mi popola la lista

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Ridimenzonamento immagine
« Risposta #8 il: 20 Giugno 2013, 10:15:17 CEST »
0
Esattamente, l'immagine dietro deve occupare la maggior parte di spazio possibile, (nello screen è corretto quella grande, non l'altra)
il problema è che impostando center, o center inside, se l'immagine è a bassa risoluzione, la rimpicciolisce lasciando degli spazi vuoti attorno (e il riquadro grigio, che è agganciato (align left right and top) all'img di sfondo, resta grande)
viceversa, se l'immagine è ad alta risoluzione, non riesce a caricarle tutte, e non mi popola la lista
allora non vedo altra alternativa che prendere l'immagine e fare il "rescaling" interno (possibilmente partendo da quelle ad alta risoluzione).
magari dai un occhio a questa parte: Displaying Bitmaps Efficiently | Android Developers
android - ImageView fit without stretching the image - Stack Overflow
« Ultima modifica: 20 Giugno 2013, 10:16:55 CEST da Nicola_D »
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline gabric

  • Utente senior
  • ****
  • Post: 613
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Ridimenzonamento immagine
« Risposta #9 il: 20 Giugno 2013, 15:12:18 CEST »
0
uhm alla fine ho risolto settando manualmente in ogni layout le dimensioni dell'immagine (quanto dev'essere grande) in ognuna delle risoluzioni
in questo modo quando scarico l'immagine, viene in automatico centrata in quel riquadro (le proporzioni dell'immagine sono sempre le stesse) e inoltre il riquadro grigio resta delle giuste dimensioni.


Non mi conviene far il rescaling manualmente perchè potrei dover scaricare 100 o più immagini, e già che così mi va out of bound... comunque grazie delle risposte, ora do una lettura relativa al mostrare le immagini in modo efficente


Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Ridimenzonamento immagine
« Risposta #10 il: 20 Giugno 2013, 15:40:48 CEST »
0
spero che tu non abbia settato un valore negli xml ma che ti sia riferito ad un valore "@dimen"  inserito in un xml per ogni risoluzione....
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline gabric

  • Utente senior
  • ****
  • Post: 613
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Ridimenzonamento immagine
« Risposta #11 il: 20 Giugno 2013, 16:02:33 CEST »
0
quest'app è molto legata all'aspetto grafico, quindi ho dovuto creare 8 cartelle per le risoluzioni
(da layout-sw320dp a layout-sw720-landscape) quindi ho settato i d in ognuno dei layout

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Ridimenzonamento immagine
« Risposta #12 il: 20 Giugno 2013, 16:13:01 CEST »
0
Io farei una bella cosa.

Altezza la setti come ?android:attr/listPreferredItemHeight
A quel punto il tuo sfondo è alto quanto la listview item.

Poi ti fai una imageview custom che mantenga l'aspect ratio, ti tieni come coordinata dominante la y e sei a posto.

O mi sfugge qualcosa nel problema che hai esposto?  :-[

Offline gabric

  • Utente senior
  • ****
  • Post: 613
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Ridimenzonamento immagine
« Risposta #13 il: 20 Giugno 2013, 16:21:35 CEST »
0
grazie del consiglio, per il momento ho già fatto tutti i layout, ma per il prossimo eventualmente seguo il tuo consiglio (non conoscevo il parametro attr/listPreferredItemHeight