android - 如何在 ViewPager 中创建可缩放页面?

标签 android android-viewpager

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

我的问题是:

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

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

请勿发布 this link作为你的答案

最佳答案

如果不知道你是如何实现缩放 View 的,我无法给你一个确切的答案,但假设你有能力跟踪你的 View 是否被放大,你可以在触摸事件到达之前有选择地取消它们查看寻呼机。它看起来像这样:

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;
        }
    }
});

您可以从那里变得更有趣,跟踪您的放大 View 是在最左边缘还是最右边缘,然后如果指针的运动分别向左或向右移动,则允许 ViewPager 的触摸事件正常完成。然后,您可以允许用户滑动到下一页,而不需要他们再次完全缩小。您可以通过 MotionEvent 对象的各种属性了解触摸是如何移动的。

您可能还想检查 event.getPointerCount() 并在它大于 1 时返回 True,这样 ViewPager 就不会在您执行缩放时四处移动。

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

关于android - 如何在 ViewPager 中创建可缩放页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8326697/

相关文章:

android - 在 viewpager 中保存 View 状态

android - 为什么当多项选择列表中的项目超过 7 个时,getCheckedItemPositions() 返回 null?

android - 在 Android 模拟器上测试摇动事件

java - 中断一个线程

java - Android sqlite rawquery selection args问题

fragment 内的 Android setShareIntent

ViewPager 中的 Android Master/Detail 流程

android - 同步服务运行后刷新 FragmentActivity 中的 fragment

java - 单击项目时在 ListView 中使用 Intent 打开不同的 fragment

android - ViewPager 内的 fragment 不会被破坏