【问题标题】:ViewPager how to only swipe view if overtop of PagerTitleStripViewPager 如何仅在 PagerTitleStrip 上方滑动视图
【发布时间】:2013-01-29 04:44:16
【问题描述】:

背景故事:

我已经搞砸了一段时间,找不到任何像样的文档。我被锁定必须支持 api 级别 8,因此查看寻呼机似乎是一个很好的解决方案。我已经让它与 pagerTitleStrip 一起使用。但是,我只希望用户在 pagerTitleStrip 上滑动时能够在视图之间滑动。我有一些工作。

问题:

当我在按钮、edittext 字段等的顶部 (touch_move) 上滑动时,viewpager 只会将其他视图的一小部分带入窗口。我不希望任何事情发生,除非在视图之间滑动的 touchmove 事件位于 pagerTitleStrip 之上。

尝试失败:

我已经设置了 viewPager 的 onTouchListener 和我用来确定用户是否在 pagerTitleStrip 上滑动的任何 onTouch 事件操作(touchmove、touchup、touchdown)。

//in onCreate()
...
setContentView(R.layout.pager_adapter);
dashboardPagerAdapter = new DashboardPagerAdapter(
getSupportFragmentManager());
dashboardViewPager = (ViewPager) findViewById(R.id.dashboard_pager);
dashboardViewPager.setAdapter(dashboardPagerAdapter);
dashboardViewPager.setId(R.layout.activity_dashboard);
dashboardViewPager.setCurrentItem(DashboardPagerAdapter.DASHBOARD);
dashboardViewPager.setOnTouchListener(this);
...

// in onTouch
View pagerTitleArea = findViewById(R.id.pager_title_strip);
    int pagerTitleBottomYLocation = pagerTitleArea.getBottom();
    initialYPositionOfEvent = 100; // set the initial position out of range.
    int action = event.getAction();

    if (action == MotionEvent.ACTION_DOWN){
        initialYPositionOfEvent = event.getY();
        originWasTitleBar = (initialYPositionOfEvent > pagerTitleBottomYLocation) ? false : true ;
        hasTouchDownEventOccured = true;
        return true;
    } else if (action == MotionEvent.ACTION_MOVE){
        if(originWasTitleBar && hasTouchDownEventOccured){
            return false;
        } else {
            return true;
        }
    } else {
        if(originWasTitleBar && hasTouchDownEventOccured){
            originWasTitleBar = false;
            hasTouchDownEventOccured = false;
            return false;
        } else {
            originWasTitleBar = false;
            hasTouchDownEventOccured = false;
            return true;
        }
    }

【问题讨论】:

  • “但是,我只希望用户在 pagerTitleStrip 上滑动时能够在视图之间滑动”——引用 PagerTitleStrip 的文档:“PagerTitleStrip 是当前的非交互式指示器ViewPager 的、下一页和上一页...有关交互式指示器,请参阅 PagerTabStrip。"
  • 我确实切换到了 PagerTabStrip,这使我能够单击条带的左侧和右侧并切换到该屏幕,这也是我试图实现的(谢谢!)。当用户触摸输入框并滑动时,我仍然无法阻止查看器接收滑动事件。
  • 如果您不想刷卡,为什么要使用ViewPager?这就是ViewPager全部内容。
  • 我希望只在标题/标签条上滑动时才会发生滑动。这样我就可以在视图上左右滚动控件来处理其他事情。没必要生气。如果有更好的方法,那么我会全力以赴。如果我确切地知道该做什么,我就不会在堆栈溢出中提问。

标签: android android-viewpager


【解决方案1】:

也许可以使用带有按钮的 ViewFlipper 来切换内容,或者使用操作栏选项卡或类似的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多