Autore Topic: Problema immagine con diverse tipologie display: QVGA WQVGA400 WVGA800 HVGA  (Letto 2762 volte)

Offline droide

  • Nuovo arrivato
  • *
  • Post: 25
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE Z
Salve Ragazzi. Vi volevo chiedere una soluzione per risolvere un problema che non riesco ancora a capire.


Questo è il mio problema:

Ho realizzato un immagine con adobe(ai) in vettoriale ed ho creato il file .png con questa risoluzine "202x525". Nel layout ho un "imageButton" con l'mmagine di 202x525 in basso al centro. Nel mio htc desire z(hdpi,normal screen) si vede benissimo.

Per cui io avevo progettato tutta l'applicazione su un display normale ad alta risoluzione. All'interno delle cartelle ho messo la stessa immagine calcolata in base alle proporzioni 3:4:6.

ldpi -> 101x262
mdpi -> 135x350
hdpi -> 202x525


Pero se io provo l'applicazione su un display piu piccolo l'immagine viene tagliata.

1)Esiste una soluzione per adattare l'immagiene per le varie tipologie di schermo?
2)Devo creare dei layout diversi?
3)"Quali calcoli devo eseguire per le proporzioni?"


Ho provato a creare dei layout diversi in base a queste tipologie di schermo:


*QVGA (240x320, ldpi, small screen)
res/layout/main-qvga.xml

*WQVGA400 (240x400)/(x432), ldpi, normal screen)
res/layout/main-wqvga400.xml

*WVGA800 (480x800)/(x854), hdpi, normal screen)
res/layout/main-wvga800.xml

*HVGA (320x480, mdpi, normal screen)
res/layout/main-hvga.xml


Ho realizzato questo semplice codice per sceglire il layout.

Codice (Java): [Seleziona]
       Configuration config = getResources().getConfiguration();
       DisplayMetrics dm = getResources().getDisplayMetrics();
   
       int size = config.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
       int dpi = dm.densityDpi;
       
       if (size == Configuration.SCREENLAYOUT_SIZE_NORMAL) // default
       {
           
           if(dpi==120){
                 
                   //setContentView( R.layout.main-wqvga400.xml );  
           }  

           if(dpi==160){
                 //setContentView( R.layout.main-hvga.xml );    
           }
           
           if(dpi==240){
                   //setContentView( R.layout.main-wvga800.xml );
           }
           
         
   
       }
       
       if (size == Configuration.SCREENLAYOUT_SIZE_SMALL)
       {  
           if(dpi==120){
                 
                   //setContentView( R.layout.main-qvga.xml );
                   
           }  
       }


     


Infine nel manifest metto queste righe:

Codice (XML): [Seleziona]
 <supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:anyDensity="true" />

 

4) Sono sulla buona strada per una giusta soluzione?

Non riesco a capire come fare. Sto impazzendo.

Aspetto una vostra notizia. Grazie a tutti in anticipo  :-).

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema immagine con diverse tipologie display: QVGA WQVGA400 WVGA800 HVGA
« Risposta #1 il: 15 Febbraio 2012, 08:14:01 CET »
0
4) Sono sulla buona strada per una giusta soluzione?

Secondo me no.

Devi partire dal presupposto che non potrai mai controllare posizioni e dimensioni "al pixel", non a caso l'AbsoluteLayout è stato praticamente eliminato. Viceversa, devi sacrificare un po' la "perfezione" del layout a favore della versatilità. Hai presente come sono progettati i layout dei siti web decenti? Si adattano da soli alle dimensioni della finestra del browser.

Difficile essere più preciso senza un caso specifico.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline droide

  • Nuovo arrivato
  • *
  • Post: 25
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE Z
Re:Problema immagine con diverse tipologie display: QVGA WQVGA400 WVGA800 HVGA
« Risposta #2 il: 15 Febbraio 2012, 12:19:18 CET »
0

Salve. Allora ho gia provato a seguire diversi articoli in qui parlavano di scalare l'immagine "di base" secondo le 4 densita. Pero se io provo su uno schermo QVGA il sistema prende l'immagine "101x262" a bassa risoluzine che viene tagliata nella parte di sotto.

Questo è il mio layout:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/main"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:gravity="clip_vertical"
   android:orientation="vertical"
   android:padding="5dp" >


        <TextView
           android:id="@+id/es1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="left"
           android:drawableLeft="@drawable/img1"
           android:drawablePadding="10dp"
           android:paddingTop="10dp"
           
           
           android:textAppearance="?android:attr/textAppearanceLarge" />
   

        <TextView
           android:id="@+id/es2"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="left"
           android:drawableLeft="@drawable/img2"
           android:drawablePadding="10dp"
           android:paddingTop="10dp"
           android:textAppearance="?android:attr/textAppearanceLarge" />


        <TextView
           android:id="@+id/es3"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="left"
           android:drawableLeft="@drawable/img3"
           android:drawablePadding="10dp"
           android:paddingTop="10dp"
           android:textAppearance="?android:attr/textAppearanceLarge" />

    <LinearLayout
       android:id="@+id/linearLayoutImgTouch"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical"
       android:paddingTop="30dp"
       
        >






        <ImageButton
           android:id="@+id/imageButtonTouch"
         android:layout_width="fill_parent"
       android:layout_height="fill_parent"
           android:layout_gravity="center"
           
           android:background="#FFFFFF"
           android:contentDescription="@string/imgDescription"
           android:src="@drawable/immagine" />

    </LinearLayout>
   
</LinearLayout>


Non esiste qualcosa per scalare le immagini? oppure creare diversi layout?

Grazie :-)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema immagine con diverse tipologie display: QVGA WQVGA400 WVGA800 HVGA
« Risposta #3 il: 15 Febbraio 2012, 12:33:52 CET »
0
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline droide

  • Nuovo arrivato
  • *
  • Post: 25
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE Z
Re:Problema immagine con diverse tipologie display: QVGA WQVGA400 WVGA800 HVGA
« Risposta #4 il: 15 Febbraio 2012, 12:44:58 CET »
0

Ho rilette un sacco di volte. Ed infatti ero arrivato alla conclusione di creare diversi layout con le immagini scalate per farle entrare nel display.

Lei come avrebbe risolto?

Offline Nicola_D

  • 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:Problema immagine con diverse tipologie display: QVGA WQVGA400 WVGA800 HVGA
« Risposta #5 il: 15 Febbraio 2012, 13:55:17 CET »
0
io farei come va fatto, cioè un solo layout e le immagini nelle varie cartelle:
drawable-ldpi
drawable-mdpi
drawable-hdpi
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 droide

  • Nuovo arrivato
  • *
  • Post: 25
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE Z
Re:Problema immagine con diverse tipologie display: QVGA WQVGA400 WVGA800 HVGA
« Risposta #6 il: 15 Febbraio 2012, 15:36:56 CET »
0

IO all'inizio lo avevo fatto come hai proposto. Pero quando ho provato l'app su un samsung piu piccolino, l'immagine veniva tagliata. Che cosa orrenda pero. su iphone il display è stardard hihii.

Io provo altre soluzioni. Spero di rispondere con una buona soluzione.

In ogni caso se qualcuno ha risolto, aspetto la sua soluzione.


Grazie androidi :-)