Autore Topic: Intercettare evento Scrollview e rimandarlo alla gallery  (Letto 412 volte)

Offline MisterHide

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Intercettare evento Scrollview e rimandarlo alla gallery
« il: 22 Marzo 2013, 17:12:00 CET »
0
Ciao, lo so che ultimamente sto rompendo, ma la mia PRIMA app è quasi finita, un altro piccolo aiuto ed è fatta  :-)
Dopo giuro che vado in vacanza e non rompo +

Comunque ho la mia customgallery che alla posizione 0 contiene un testo, mentre dalla posizione 1 a n, contiene le immagini. Il testo l'ho messo in una scrollview perchè può essere molto lungo.
Sia le immagini che il testo le visualizzo a tutto schermo, quindi mi esce un'immagine per volta.

Per fare tutto questo, nel metodo getView dell'adapter verifico la posizione della Gallery ... vabbe questo è il metodo dell'adapter:
Codice (Java): [Seleziona]
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView txtImageView;
        ImageView imageView;
        if(convertView==null){
            txtImageView = new TextView(context);
            imageView = new ImageView(context);
        } else {
            txtImageView = (TextView) convertView;
            imageView = (ImageView) convertView;
        }
        //Verifico la posizione della gallery
        //   se è 0 allora devo visualizzare il testo
        if (position==0) {
                LinearLayout layout=new LinearLayout(context);
                layout.setOrientation(LinearLayout.VERTICAL);
                       
                ScrollView scrollView=new ScrollView(context);
                txtImageView.setText(descRistorante);
                       
                scrollView.addView(txtImageView);
                layout.addView(scrollView);
                       
                layout.setLayoutParams(new Gallery.LayoutParams(450, 550));
               
                scrollView.setOnTouchListener(new MyOnTouch());
                       
                return layout;
        //Se la posizione è 1..n allora visualizzo le immagini
        }else{
                imageLoader.DisplayImage(data[position], imageView);
                imageView.setAdjustViewBounds(true);
                imageView.setLayoutParams(new Gallery.LayoutParams(450, 550));
                return imageView;
        }
    }

Nell'Activity io faccio in modo da far partire la mia gallery dalla posizione 1 in questo modo

gallery.setSelection(1);

Il problema è che quando dalla posizione 1  vado alla posizione 0 ed esce il testo (con lo scorrimento verticale funzionante) poi non posso + ritornare alla posizione 1 perchè non mi intercetta più il touch della gallery (o almeno credo).
Come posso fare per dire allo scrollview che se il movimento è orizzontale deve agire la gallery e quindi portarmi all'immagine (cioè alla pos. 1)
Io ho provato aggiungendo allo scrollview il setOnTouchEvent così :

scrollView.setOnTouchListener(new MyOnTouch());

e quindi ho creato la classe MyOnTouch che mi dovrebbe gestire il touch sulla scrollview:
Codice (Java): [Seleziona]
public class MyOnTouch implements OnTouchListener {
           private float startX;
           @Override
           public boolean onTouch(View v, MotionEvent event) {
               return pageFlip(v, event);          
           }

           public boolean pageFlip(View v, MotionEvent event) {
               switch (event.getAction()) {
               case MotionEvent.ACTION_DOWN:
                   startX = event.getX();
                   break;
               case MotionEvent.ACTION_UP:
                   float currentX = event.getX();      
                    if (startX > currentX + 50 ) {
                        Log.d("myontouch", "startX > currentX+150");
                        //Qui dovrei fare in modo di richiamare il touch della gallery
                    }
                    if (startX  < currentX - 50) {                
                        Log.d("myontouch", "startX < currentX+150");
                    }
               default:
                   break;
                }
                return false;
           }
}

Come posso risolvere?
grazie infinitamente.