Android горизонтальная Scrollview ведут себя как iPhone ( подкачки )

? Davide Vosti @ | Original: StackOverFlow
---

У меня есть LinearLayout внутри HorizontalScrollView . Содержание толькоизображение . При прокрутке, мне нужно добиться того же поведение, которое вы получаете, когда установки опции подкачки наiPhone эквивалент HSW (прокрутка списка должны останавливаться на каждой странице в списке, не продолжит движение ).

Как это делается в Android? Должен ли я осуществить это показывает сам или естьконкретное имущество, чтобы установить илиподкласс ВПГ реализовать?

---

Top 5 ответ

1Davide Vosti @

Таким образом, мое решение :

Intercept the onTouch event and calculate whether the page should change to the next or keep on the current Inherit from HorizontalScrollView and override the method computeScroll

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

Код для обработчика событий является :

_scrollView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_UP)
            {
                float currentPosition = _scrollView.getScrollX();
                float pagesCount = _horizontalBar.getChildCount();
                float pageLengthInPx = _horizontalBar.getMeasuredWidth()/pagesCount;
                float currentPage = currentPosition/pageLengthInPx;

                Boolean isBehindHalfScreen =  currentPage-(int)currentPage > 0.5;

                float edgePosition = 0;
                if(isBehindHalfScreen)
                {
                    edgePosition = (int)(currentPage+1)*pageLengthInPx;
                }
                else
                {
                    edgePosition = (int)currentPage*pageLengthInPx;
                }

                _scrollView.scrollTo((int)edgePosition, 0);
            }

            return false;
        }
    });

И в моей наследственной HorizontalScrollView

@Override
    public void  computeScroll  (){
        return;
    }
2aveyD @

Я наткнулся на хорошее решение здесь :

[ Горизонтальные Пейджер ] [ 1 ]

этоочищен GitHub версия кода находится здесь :

[ Недвижимость Посмотреть Switcher ] [ 2 ]

Это может показаться излишним для просто использовать его на изображениях, но это решение позволяет бесконечного просмотра с помощью маленькой хитрости (т.е. когда на первой странице вы можете прокручивать назад к последней странице, и когда на последней странице вы можете прокручивать вперед на первую страницу ) . Она также позволяет вам иметь неизвестное количество страниц и динамически генерировать контент с помощью другого маленькую хитрость . Пожалуйста, смотрите мой комментарий в второй ссылке http://marcreichelt.blogspot.com/2010/09/android-use-realviewswitcher-to-switch.html?showComment=1300309034192#c6685928714729240104

Для получения подробной информации о том, как я достиг этого .

Надеюсь это поможет.

[ 1 ] : https://github.com/ysamlan/horizontalpager

[ 2 ] : http://marcreichelt.blogspot.com/2010/09/android-use-realviewswitcher-to-switch.html

3Patrick Boos @

Новый совместимость пакета ( редакция 3 ) в Android добавил ViewPager, который делает это.

http://developer.android.com/sdk/compatibility-library.html

4David Hernandez @

я нашел другой способ, чтобы получить тот же эффект, и я думаю, что это более читабельным. Воттак:

@Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_UP)
            {
                float currentPosition = hsv.getScrollX();
                float pagesCount = hsv.getChildCount();
                float pageLengthInPx = hsv.getMeasuredWidth()/pagesCount;

                int page = (int) (Math.floor((currentPosition - pageLengthInPx / 2) / pageLengthInPx) + 1);
                hsv.scrollTo((int) (page * pageLengthInPx), 0);
            }

            return false;
        }