Autore Topic: Galleria immagini come menu - iniziare da foto centrale  (Letto 1290 volte)

Offline MMarko

  • Utente junior
  • **
  • Post: 128
  • Respect: +5
    • MarcoMatarazzi
    • Mostra profilo
    • La Rocchetta Bed And Breakfast
  • Dispositivo Android:
    HTC Legend
  • Play Store ID:
    MarcoMatarazzi
Galleria immagini come menu - iniziare da foto centrale
« il: 02 Dicembre 2010, 20:03:48 CET »
+1
Buona sera a tutti, ho creato un menu particolare, la mia idea è quella di sfruttare una gallery di seguito trovate il codice e uno screen:
Codice (Java): [Seleziona]
public class Menu extends Activity implements ViewFactory {
       
        // Immagini del menu
        Integer[] immaginiGrandi = {
                        R.drawable.pic1,
                        R.drawable.pic2,
                        R.drawable.pic3,
                        R.drawable.pic5,
                        R.drawable.pic4,
                        R.drawable.pic6
                        };
       
        //anteprime
        Integer[] immaginiPiccole = {
                        R.drawable.small1,
                        R.drawable.small2,
                        R.drawable.small3,
                        R.drawable.small5,
                        R.drawable.small4,
                        R.drawable.small6
                        };

        private ImageSwitcher imageSwitcher;
       
        //variabile per la gestione degli intent
        public int selezione = 0;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.menu_principale);
               
                //Pulsante per il GPS
                Button entra = (Button)findViewById(R.id.pulsante_main);
                entra.setTypeface(null, Typeface.BOLD);
                entra.setTextSize(16);
               
                //PULSANTE PER ENTRARE NELLE VARIE VOCI
                entra.setOnClickListener(new OnClickListener() {
                        public void onClick(View v) {
                                if(selezione == 0){
                                        Intent i1 = new Intent(Menu.this, Nome.class);
                                        startActivity(i1);
                                }else if(selezione == 1){                                      
                                        Intent i2 = new Intent(Menu.this, Nome.class);
                                        startActivity(i2);
                                }else if(selezione == 2 ){
                                        Intent i3 = new Intent(Menu.this, Nome.class);
                                        startActivity(i3);
                                }else if(selezione == 4){
                                        Intent i4 = new Intent(Menu.this, Nome.class);
                                        startActivity(i4);
                                }else if(selezione == 5){
                                        Intent i5 = new Intent(Menu.this, Nome.class);
                                        startActivity(i5);
                                } else {                       
                                        Intent i6 = new Intent(Menu.this, Nome.class);
                                        startActivity(i6);
                                }
                        }
                });

                imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher1);

                imageSwitcher.setFactory(this);
                imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
                imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));

                // la prima immagine deve essere gia visualizzata sullo sfondo
                imageSwitcher.setImageResource(immaginiGrandi[0]);

                Gallery gallery = (Gallery) findViewById(R.id.gallery1);

                gallery.setAdapter(new ImageAdapter(this));
                gallery.setOnItemClickListener(new OnItemClickListener() {
                        @SuppressWarnings("unchecked")
                        public void onItemClick(AdapterView parent, View v, int position, long id) {
                                imageSwitcher.setImageResource(immaginiGrandi[position]);
                                selezione = position;
                        }
                });
       
        }

        public View makeView() {
                ImageView imageView = new ImageView(this);
                imageView.setBackgroundColor(0xFF000000);
                imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                imageView.setLayoutParams(new ImageSwitcher.LayoutParams(
                                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
               

                return imageView;
        }

        public class ImageAdapter extends BaseAdapter {
                private Context context;
                private int itemBackground;

                public ImageAdapter(Context c) {
                        context = c;

                        // ---setting the style---
                        TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
                        itemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);
                        a.recycle();
                }

                // ---returns the number of images---
                public int getCount() {
                        return immaginiGrandi.length;
                }

                // ---returns the ID of an item---
                public Object getItem(int position) {
                        return position;
                }

                public long getItemId(int position) {
                        return position;
                }

                // ---returns an ImageView view---
                public View getView(int position, View convertView, ViewGroup parent) {
                        ImageView imageView = new ImageView(context);
                        imageView.setImageResource(immaginiPiccole[position]);
                        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                        imageView.setLayoutParams(new Gallery.LayoutParams(100, 80));
                        imageView.setBackgroundResource(itemBackground);               
                        return imageView;
                }
        }
       
    public void onBackPressed() {
        Log.d("CDA", "onBackPressed Called");
        Intent setIntent = new Intent(this, Menu.class);
        setIntent.addCategory(Intent.CATEGORY_HOME);
        setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(setIntent);
        return;
    }
           

}

Screen:

Vorrei però fare due piccole cose:

1) Vorrei fare iniziare la gallery da un immagine centrale

2) Vorrei fare in modo che scorrendo le anteprime cambi l'imageSwitcher (adesso invece devo premere su ogni anteprima per far cambiare la foto di sfondo).


Qualche consiglio?
Grazie :)

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Galleria immagini come menu - iniziare da foto centrale
« Risposta #1 il: 02 Dicembre 2010, 21:27:18 CET »
+1
1.
usa setSelection sulla gallery per impostare la posizione

2.
copia il codice che hai messo nell'onclick della gallery e incollalo in getView


Offline MMarko

  • Utente junior
  • **
  • Post: 128
  • Respect: +5
    • MarcoMatarazzi
    • Mostra profilo
    • La Rocchetta Bed And Breakfast
  • Dispositivo Android:
    HTC Legend
  • Play Store ID:
    MarcoMatarazzi
Re:Galleria immagini come menu - iniziare da foto centrale
« Risposta #2 il: 02 Dicembre 2010, 22:26:28 CET »
0
Grazie per la risposta.

Il codice gallery.setSelection(2);
ha risolto il punto 1, OTTIMO!

Ma inserire imageSwitcher.setImageResource(immaginiGrandi[position]); nel getView() mi produce un risultato strano.
Ossia mi vengono visualizzate solo alcune immagini in ordine sbagliato alternate da schermate nere.

Mi sono perso qualcosa?   :-\

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Galleria immagini come menu - iniziare da foto centrale
« Risposta #3 il: 02 Dicembre 2010, 22:51:22 CET »
+2
hm... sorry mea culpa, il secondo è normale che non funziona... il getview viene fatto per le view visibili all inizio quindi fa casino...

prova ad implementare onItemSelectedListener sulla gallery ed assegnare l immagine nel listener.

Offline MMarko

  • Utente junior
  • **
  • Post: 128
  • Respect: +5
    • MarcoMatarazzi
    • Mostra profilo
    • La Rocchetta Bed And Breakfast
  • Dispositivo Android:
    HTC Legend
  • Play Store ID:
    MarcoMatarazzi
Re:Galleria immagini come menu - iniziare da foto centrale
« Risposta #4 il: 03 Dicembre 2010, 10:34:07 CET »
+1
Grande!
Avevi perfettamente ragione, ecco il codice che risolve anche il secondo punto:
Codice (Java): [Seleziona]
gallery.setOnItemSelectedListener(new Gallery.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
                // TODO Auto-generated method stub
                imageSwitcher.setImageResource(immaginiGrandi[arg2]);
        }

         @Override
                public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
                }
});
               

Grazie mille!
 :D

Offline MMarko

  • Utente junior
  • **
  • Post: 128
  • Respect: +5
    • MarcoMatarazzi
    • Mostra profilo
    • La Rocchetta Bed And Breakfast
  • Dispositivo Android:
    HTC Legend
  • Play Store ID:
    MarcoMatarazzi
Re:Galleria immagini come menu - iniziare da foto centrale
« Risposta #5 il: 07 Dicembre 2010, 17:32:46 CET »
0
Aggiungo una domanda al post (non credo sia il caso di aprire un nuovo topic), premesso che il menu cosi com'è funziona benone vorrei apportare una miglioria.

Scorrendo le anteprime non si ottiene uno scrorrimento fluido poichè l'immagine di sfondo viene cambiata continuamente, quale può essere una soluzione per fluidificare lo scorrimento?

Mi sono dato una risposta, solo teorica però, bisognarebbe fare in modo che l'immagine di sfondo grande venga cambiata dopo un intervallo temporarale (ad esempio un paio di decimi di secondo).

E' una cosa fattibile?
Oppure esiste una soluzione migliore?

Grazie ;)

Offline MMarko

  • Utente junior
  • **
  • Post: 128
  • Respect: +5
    • MarcoMatarazzi
    • Mostra profilo
    • La Rocchetta Bed And Breakfast
  • Dispositivo Android:
    HTC Legend
  • Play Store ID:
    MarcoMatarazzi
Re:Galleria immagini come menu - iniziare da foto centrale
« Risposta #6 il: 26 Giugno 2011, 11:28:12 CEST »
+1
Avevo dimenticato di postare la soluzione al problema "fluidità" bè ecco la soluzione:

Codice (Java): [Seleziona]
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
     gallery.setCallbackDuringFling(false);
     [...]
}

Ciao!
Marco :)