在ViewPager中从左向右滑动时显示弹出框,并且在弹出页面不应该移动

问题描述:

我有一个MainActivity,它包含10个片段。我想禁止在特定页面中从右向左滑动,并显示一个弹出窗口,取消和确认按钮,点击确认会将您带到下一个片段。我在MainActivity的OnTouch实现中实现了这一点。但片段在生成弹出之前正在移动。我在*的其他答案中尝试了很多,但没有运气。 dispatchTouchEvent()OnTouchIntercept()OnTouchEvent()有帮助吗?在ViewPager中从左向右滑动时显示弹出框,并且在弹出页面不应该移动

这是为viewpager实现的OnTouch方法。

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

我想禁止从萤幕上向右滑动到左

可以使用自定义ViewPager做到这一点

特定页面,使用方法 setPagingEnabled禁用/启用刷卡

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

因为您成功检测到您的滑动,您可以应用您的代码来显示弹出窗口中的状态禁用滑动viewpager来显示弹出窗口,控制点击确认/取消弹出设置您的片段。

+0

谢谢。它终于奏效了。用你给出的代码和线索,我已经尝试了最后一次,它的工作。我的天啊 –