Как создать масштабируемые страницы в ViewPager? - PullRequest
2 голосов
/ 30 ноября 2011

Я хочу создать ViewPager, который содержит масштабируемые виды, такие как веб-страницы.

Моя проблема:

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

Пожалуйста, предложите какое-нибудь правильное решение.

Не публикуйте эту ссылку в качестве ответа

1 Ответ

0 голосов
/ 02 декабря 2011

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

boolean isZoomedIn;

viewPager.setOnTouchListener(new OnTouchListener()
{
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        if (isZoomedIn)
        {
            // The view is zoomed in, so we want to handle this event 
            // before it gets to the ViewPager so the view can pan
            // around freely.
            return true;
        }
        else
        {
            // The view is zoomed out; let the ViewPager react normally.
            return false;
        }
    }
});

Оттуда вы можете придумать, отслеживая, находится ли увеличенный вид на крайнем левом или правом краю, а затем позволяя событию касания ViewPager завершиться нормально, если движение указателя идет влево или вправо, соответственно. Затем вы можете разрешить пользователю переходить на следующую страницу, не требуя, чтобы он снова уменьшал масштаб. Вы можете узнать все о том, как работает касание, с помощью различных свойств объекта MotionEvent.

Возможно, вы также захотите проверить event.getPointerCount () и вернуть True, если он больше единицы, поэтому ViewPager не будет перемещаться при выполнении масштабирования.

Отслеживать и учитывать все переменные немного сложнее, но это относительно простая математика, и результат сводится к возвращению True для событий, которые ViewPager должен игнорировать, и False для тех, на которые вы хотите, чтобы он реагировал.

...