Autore Topic: ImageSwitcher - Cambiare un testo scorrendo la galleria  (Letto 1209 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
ImageSwitcher - Cambiare un testo scorrendo la galleria
« il: 04 Ottobre 2010, 16:12:34 CEST »
0
Ciao a tutti, ho appena finito di implementare un ImageSwitcher, funziona con egregia fluidità sul mio Legend e sono soddisfatto :P

Ho però un problema che non riesco a risolvere, vorrei fare in modo che scorrendo l'array di foto venga cambiata la didascalia (che è una TextView).

Codice (Java): [Seleziona]
public class DisplayViewsExample extends Activity
{    
    //---the images to display---
    Integer[] imageIDs = {
            R.drawable.pic1,
            R.drawable.pic2,
            R.drawable.pic3,
            R.drawable.pic4,
            R.drawable.pic5,
            R.drawable.pic6,
            R.drawable.pic7                    
    };
 
    @Override    
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.displayview);
 
        Gallery gallery = (Gallery) findViewById(R.id.gallery1);
 
        gallery.setAdapter(new ImageAdapter(this));        
        gallery.setOnItemClickListener(new OnItemClickListener()
        {
            public void onItemClick(AdapterView parent,
            View v, int position, long id)
            {                
                Toast.makeText(getBaseContext(),
                        "pic" + (position + 1) + " selected",
                        Toast.LENGTH_SHORT).show();
            }
        });

        TextView didascalia = (TextView) this.findViewById(R.id.dida);
        didascalia.setText("Didascalia: " + variabileString);
    }
 
    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 imageIDs.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(imageIDs[position]);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            imageView.setLayoutParams(new Gallery.LayoutParams(150, 120));
            imageView.setBackgroundResource(itemBackground);
            return imageView;
        }
    }    
}

Grazie raga :)
« Ultima modifica: 04 Ottobre 2010, 16:14:31 CEST da MMarko »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ImageSwitcher - Cambiare un testo scorrendo la galleria
« Risposta #1 il: 04 Ottobre 2010, 17:25:54 CEST »
0
Non basta mettere il codice per cambiare didascalia dentro l'OnItemClickListener?

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:ImageSwitcher - Cambiare un testo scorrendo la galleria
« Risposta #2 il: 04 Ottobre 2010, 17:34:50 CEST »
0
in quel modo il testo cambierebbe alla selezione della foto?! no? io vorrei che scorrendo le foto la didascalia cambi "al volo", non so se sono riuscito a spiegarmi

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • 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

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:ImageSwitcher - Cambiare un testo scorrendo la galleria
« Risposta #4 il: 04 Ottobre 2010, 20:48:15 CEST »
0
dai un occhiata qui:
Aggiungere testo sotto le immagini della gallery - Android Developers Italia

;)

Qlimax grazie mille, mi era proprio sfuggito quel topic!!!

Comunque un problema rimane, non ho la didascalia della foto corrente ma solo della "successiva" e della "precedente", ecco il codice:

Codice (Java): [Seleziona]
        public View getView(int elemento, View arg1, ViewGroup arg2) {
                       
            LinearLayout layout = new LinearLayout(getApplicationContext());
           
            layout.setOrientation(LinearLayout.VERTICAL);
                   
            ImageView img = new ImageView(ctx);
           
            img.setImageResource(pics[elemento]);
            img.setScaleType(ImageView.ScaleType.FIT_XY);
            img.setLayoutParams(new Gallery.LayoutParams(200,150));
            img.setBackgroundResource(itemBackground);
           
            TextView tv = new TextView(ctx);
           
            String titolo = "";
           
            if(elemento == 0){
                titolo = "Prima foto";
            } else if (elemento == 1) {
                titolo = "Seconda foto";
            } else if (elemento == 2) {
                titolo = "Terza foto";
            }
           
            tv.setText(titolo);
            tv.setGravity(Gravity.CENTER);            
           
            //Utilizzo l'AssetManager per cambiare il font
            AssetManager assetManager = getResources().getAssets();
            Typeface typeface = Typeface.createFromAsset(assetManager, "fonts/CALIFR.TTF");
            tv.setTypeface(typeface);
           
            layout.addView(img);
            layout.addView(tv);
           
            return layout;

In altre parole, se scorro sulla seconda foto vedo sotto alla prima ed alla terza foto le rispettive didascalie, mentre sotto la seconda non appare  :-\

Credo mi sfugga qualche concetto sulle View :P

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:ImageSwitcher - Cambiare un testo scorrendo la galleria
« Risposta #5 il: 06 Ottobre 2010, 15:19:08 CEST »
0
Spiego meglio quello che non riesco a risolvere:

ho 3 immagini che appartengono allo slide fotografico, ogni immagine deve avere una sua didascalia, ma vorrei che questa sia visibile solo per l'immagine correntemente visualizzata.

Con il mio codice accade l'opposto, selezionando l'immagine 2 vedo le didascalie sotto l'immagine 1 e 3  o_O

Ecco il codice:
Codice (Java): [Seleziona]
public class ImageAdapter extends BaseAdapter {

        private Context ctx;
        private int itemBackground;

        public ImageAdapter(Context c) {
               
        ctx = c;
                       
        //definisco lo stile dello slide di immagini
        TypedArray a = obtainStyledAttributes(R.styleable.Gallery01);
        itemBackground = a.getResourceId(R.styleable.Gallery01_android_galleryItemBackground, 0);
        a.recycle();    
}
        @Override
        public int getCount() {
                return pics.length;
        }

        @Override
        public Object getItem(int arg0) {
                return arg0;
        }

        @Override
        public long getItemId(int arg0) {
                return arg0;
        }

        @Override
        public View getView(int elemento, View arg1, ViewGroup arg2) {

                       
            LinearLayout layout = new LinearLayout(getApplicationContext());
           
            layout.setOrientation(LinearLayout.VERTICAL);
                   
            ImageView img = new ImageView(ctx);
           
            img.setImageResource(pics[elemento]);
            img.setScaleType(ImageView.ScaleType.FIT_XY);
            img.setLayoutParams(new Gallery.LayoutParams(280,210));
            img.setBackgroundResource(itemBackground);
           
            TextView tv = new TextView(ctx);
           
            String titolo = "";
           
            if(elemento == 0){
                titolo = "Campagne Umbre";
            } else if (elemento == 1) {
                titolo = "Montagne Trentino";
            } else if (elemento == 2) {
                titolo = "Lago Trasimeno";
            }
           
            tv.setText(titolo);
            tv.setGravity(Gravity.CENTER);            
           
                //Utilizzo l'AssetManager per cambiare il font
                AssetManager assetManager = getResources().getAssets();
                Typeface typeface = Typeface.createFromAsset(assetManager, "fonts/CALIFR.TTF");
            tv.setTypeface(typeface);
            tv.setTextSize(50);
            tv.setPadding(0,0,0,40); //imposto il margine di bottom del testo
           
            layout.addView(img);
            layout.addView(tv);
           
            return layout;
                }

}
PS: perdonate l'indentatura un pochino sballata :P

Grazie raga!


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Edit: ho risolto il problema, per qualche motivo a me sconosciuto la didascalia della foto corrente prendeva lo stesso colore dello sfondo e quindi era chiaramente invisibile.
Credo che sia una cosa del tutto casuale, poichè il mio sfondo è #333333ff (se non ricordo male) lo stesso "grigio topo" che veniva dato al testo.

Si risolve definendo colors.xml e cambiando il colore della TextView manualmente.
 :-P
« Ultima modifica: 15 Ottobre 2010, 09:57:56 CEST da MMarko, Reason: Aggiunta la risoluzione del problema »