我想创建一个包含可缩放视图(例如网页)的 ViewPager。
我的问题是:
当用户缩放(缩放)显示的视图时,ViewPager 不应该跳到显示视图左侧或右侧的页面,相反,我定义的平移方法应该适用于该视图。我知道视图寻呼机中有一个 requestDisallowOnTouchIntercept 方法,但它似乎在任何地方都不起作用,而不是 onTouch 方法。
请提供一些有效的解决方案。
不要发布此链接作为您的答案
我想创建一个包含可缩放视图(例如网页)的 ViewPager。
我的问题是:
当用户缩放(缩放)显示的视图时,ViewPager 不应该跳到显示视图左侧或右侧的页面,相反,我定义的平移方法应该适用于该视图。我知道视图寻呼机中有一个 requestDisallowOnTouchIntercept 方法,但它似乎在任何地方都不起作用,而不是 onTouch 方法。
请提供一些有效的解决方案。
不要发布此链接作为您的答案
在不知道您如何实现缩放视图的情况下,我无法给您确切的答案,但假设您能够跟踪您的视图是否被放大,您可以在触摸事件到达 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。