Событие горизонтального пролистывания справа налево onTouchlistner для кнопки в элементе списка

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

final Button btnLoyaltyName = (Button) view .findViewById(R.id.loyaltynamebutton);

        btnLoyaltyName.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                int action = event.getAction();

                switch (action) {
                case MotionEvent.ACTION_DOWN: {
                    downX = event.getX();
                    downY = event.getY();
                    return true;
                }
                case MotionEvent.ACTION_CANCEL: {
                    upX = event.getX();
                    upY = event.getY();

                    float deltaX = downX - upX;
                    float deltaY = downY - upY;

                    Log.i("afasf", "X Position==" + deltaX + "Y poastion="
                            + deltaY);

                    // if (deltaX > 0)
                    {
                        // swipe horizontal?
                        if (Math.abs(deltaX) > MIN_DISTANCE) {
                            // left or right

                            if (deltaX < 0) {
                                onSwipe(v);
                                return true;
                            }
                            if (deltaX > 0) {
                                onSwipe(v);
                                return true;
                            }
                        } else {
                            // Log.i(logTag, "Swipe was only " +
                            // Math.abs(deltaX) + " long, need at least " +
                            // MIN_DISTANCE);
                            return false; // We don't consume the event
                        }

                    }
                }
                }
                return false;

            }
        });

person user853341    schedule 29.09.2013    source источник


Ответы (1)


вы находитесь на неправильном пути, прочитайте о GestureDetector, http://developer.android.com/reference/android/view/GestureDetector.html

person pskink    schedule 29.09.2013
comment
Спасибо за ваш ответ, но я пытался использовать GestureDetector, но его метод onfling не вызывается, поэтому я попытался использовать вышеуказанный подход. Я пробовал точно так же, как указано в этой ссылке stackoverflow.com/questions/16017988/ с использованием OnSwipeTouchListener.java, но onFilg's метод не вызывается. - person user853341; 29.09.2013
comment
это потому, что вы загружаете свой GestureDetector из неправильного места, в случае ListView это должна быть ViewGroup, которая используется в качестве элемента ListView - person pskink; 29.09.2013
comment
Еще раз спасибо за ответ, в моем списке есть кнопка и над двумя текстовыми представлениями. если я проведу по кнопке справа налево, метка кнопки будет изменена. Все это я делаю в методе bindview курсора. это неправильно? - person user853341; 29.09.2013