首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在ViewPager中从左向右滑动时显示弹出窗口,在弹出页期间不应移动

在ViewPager中从左向右滑动时显示弹出窗口,在弹出页期间不应移动
EN

Stack Overflow用户
提问于 2017-03-03 00:26:15
回答 1查看 277关注 0票数 0

我有一个MainActivity,里面有10个片段。我想禁用从右到左在特定页面中的滑动,并显示一个弹出,使用取消和确认按钮,其中单击确认将带您到下一个片段。我是通过在OnTouch中实现MainActivity来实现这一点的。但是在弹出式窗口生成之前,碎片正在移动。我试过很多其他的答案,在Stackoverflow,但没有运气。dispatchTouchEvent()OnTouchIntercept()OnTouchEvent()有帮助吗?

这是为查看器实现的OnTouch方法。

代码语言:javascript
代码运行次数:0
运行
复制
@Override
        public boolean onTouch(View v, MotionEvent event) {

            int action = event.getActionMasked();
            float finalX;
            float finalY;
            switch (action) {

                case MotionEvent.ACTION_DOWN:
                    initialX = event.getX();
                    initialY = event.getY();
                    //Log.i(TAG, "Action was DOWN");
                    return true;

                /*case MotionEvent.ACTION_MOVE:
                    //Log.i(TAG, "Action was MOVE");
                    finalX = event.getX();
                    finalY = event.getY();

                    if (initialX > finalX) {
                        //Log.i(TAG, "Left to Right swipe performed");
                        return true;
                    }
                    else return false;*/

                case MotionEvent.ACTION_UP:

                    finalX = event.getX();
                    finalY = event.getY();

                    //Log.i(TAG, "Action was UP");

                    if (initialX < finalX) {
                        Log.i(TAG, "Left to Right swipe performed");
                        return false;
                        //mViewPager2.setCurrentItem(mViewPager2.getCurrentItem()-1);
                    }

                    if (initialX > finalX) {
                        Log.i(TAG, "Right to Left swipe performed");
                        int a = mViewPager2.getCurrentItem();
                        if(a==0||a==1||a==2||a==4||a==6){
                            displayPopup();
                            return true;
                        }
                        else if(a==7 && screenPreferences.getInt("user_login",0) == 0){
                            displayPopup();
                            return true;
                        }
                        else return false;

                    }

                    if (initialY < finalY) {
                        //Log.i(TAG, "Up to Down swipe performed");
                        return true;
                    }

                    if (initialY > finalY) {
                        //Log.i(TAG, "Down to Up swipe performed");
                        return true;
                    }
                    break;

                case MotionEvent.ACTION_CANCEL:
                    //Log.i(TAG,"Action was CANCEL");
                    break;

                case MotionEvent.ACTION_OUTSIDE:
                    //Log.i(TAG, "Movement occurred outside bounds of current screen element");
                    break;
            }
            return false;
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-03 02:50:52

我想在特定的页面中禁用从右到左的滑动。

YOu可以使用自定义ViewPager来完成此操作,使用方法setPagingEnabled禁用/启用滑动

代码语言:javascript
代码运行次数:0
运行
复制
public class CustomViewPager extends ViewPager {

    private boolean enabled;

    public AHBottomNavigationViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.enabled = false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (this.enabled) {
            return super.onTouchEvent(event);
        }

        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (this.enabled) {
            return super.onInterceptTouchEvent(event);
        }

        return false;
    }

    /**
     * Enable or disable the swipe navigation
     * @param enabled
     */
    public void setPagingEnabled(boolean enabled) {
        this.enabled = enabled;
    }
}

因为您成功地检测到了您的滑动,所以可以应用您的代码在状态中显示弹出式弹出,禁用对视图的滑动以显示弹出窗口,并且您可以控制单击弹出框的确认/取消来设置下一个片段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42568490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档