2

我想创建一个包含可缩放视图(例如网页)的 ViewPager。

我的问题是:

当用户缩放(缩放)显示的视图时,ViewPager 不应该跳到显示视图左侧或右侧的页面,相反,我定义的平移方法应该适用于该视图。我知道视图寻呼机中有一个 requestDisallowOnTouchIntercept 方法,但它似乎在任何地方都不起作用,而不是 onTouch 方法。

请提供一些有效的解决方案。

不要发布此链接作为您的答案

4

1 回答 1

0

在不知道您如何实现缩放视图的情况下,我无法给您确切的答案,但假设您能够跟踪您的视图是否被放大,您可以在触摸事件到达 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() 并在它大于 1 时返回 True,因此 ViewPager 在您执行缩放时不会四处移动。

跟踪和解释所有变量有点复杂,但它是相对简单的数学运算,结果归结为对于您希望 ViewPager 忽略的事件返回 True,对于您希望它做出反应的事件返回 False。

于 2011-12-01T21:10:09.590 回答