Как запустить OnTouchListener на элементах ScrollView, но только когда пользователь не прокручивает? - PullRequest
0 голосов
/ 12 марта 2012

У меня огромные проблемы с управлением горизонтальной прокруткой.Он имеет горизонтальную линейную разметку с множеством вертикальных линейных разметок с текстом и изображением.

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

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

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

Спасибо

Мой код:

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;                }                               
        });
    }

1 Ответ

2 голосов
/ 12 марта 2012

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

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

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

Вы можете узнать больше о разнице между касанием и щелчком здесь .

...