2012-03-12 2 views
0

У меня огромная проблема с управлением горизонтальным прокруткой. Он имеет внутри горизонтального линейного макета с большим количеством вертикальных линейных макетов, у которых есть текст и изображение.Как запустить OnTouchListener на элементах ScrollView, но только тогда, когда пользователь не прокручивает?

Я хочу, чтобы при нажатии на вертикальные линейные выходы, ontouchlistener нужно называть запуск новой функции моего приложения.

Проблема заключается в том, что когда пользователь прокручивает прокрутку, вызывается ontouchlistener из verticallinearlayouts, и я этого не хочу.

Как это можно решить?

Благодаря

Мой код:

final HorizontalScrollView hsv = new HorizontalScrollView(this); 
    RelativeLayout.LayoutParams hsvParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
    hsvParams.addRule(RelativeLayout.BELOW,6); 
    hsv.setBackgroundColor(0x55383838); 
    hsv.setLayoutParams(hsvParams); 
    hsv.setVisibility(View.GONE); //inicialmente está oculto 

    LinearLayout hsvll = new LinearLayout(this); 
    hsvll.setOrientation(LinearLayout.HORIZONTAL); 
    hsvll.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    hsvll.setPadding(0, 0, 0, 5); 

    createThumbnails(); 

    List <LinearLayout> thumbnailLinearLayouts = new ArrayList<LinearLayout>(); 


for (int i=1; i<=squareGLSurfaceView.pages.size();i++){ //el tope es <=pages.size() porque hay que recordar que se ha añadido una página en blanco al principio, por lo que la última página será = .size(). Nos guiamos por pages.size en lugar de thumbnails.size() porque thumbnails.size() puede haber crecido para añadir una página en blanco al final, que no queremos mostrar 
      LinearLayout ll = new LinearLayout(this); 
      ll.setOrientation(LinearLayout.VERTICAL); 
      ll.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
      ll.setPadding(10, 0, 10, 0); 
      thumbnailLinearLayouts.add(ll);  

      TextView tv = new TextView(this); 
      tv.setText(""+(i)); 
      tv.setGravity(Gravity.RIGHT); 
      ll.addView(tv); 

      ImageView iv = new ImageView(this); 
      iv.setImageBitmap(thumbnails.get(i)); 
      ll.addView(iv); 

      hsvll.addView(ll); 
     } 

hsv.addView(hsvll); 
    rl.addView(hsv); 

    for (int i=0;i<thumbnailLinearLayouts.size();i++){ 
     final int auxIndex=i; 
     thumbnailLinearLayouts.get(i).setOnTouchListener(new OnTouchListener(){ 
      @Override 
      public boolean onTouch(View v, MotionEvent event) {     
       MagazineStatus.currentPage=auxIndex; 
       hsv.setVisibility(View.GONE); 
       return true;    }        
     }); 
    } 

ответ

2

Проблема, кажется, что вы используете OnTouchListener. Попробуйте вместо этого использовать OnClickListener.

onClick() - Вызывается, когда пользователь либо касается предмета (в режиме касания), либо фокусируется на элементе с помощью навигационных клавиш или трекбола и нажимает подходящую клавишу «Ввод» или нажимает на трекбол.

onTouch() - Вызывается, когда пользователь выполняет действие, квалифицируемое как событие касания, включая нажатие, высвобождение или любой жест движения на экране (в пределах предмета).

Подробнее о различии между касанием и нажмите here.