在ViewPager中从左向右滑动时显示弹出框,并且在弹出页面不应该移动
问题描述:
我有一个MainActivity
,它包含10个片段。我想禁止在特定页面中从右向左滑动,并显示一个弹出窗口,取消和确认按钮,点击确认会将您带到下一个片段。我在MainActivity
的OnTouch实现中实现了这一点。但片段在生成弹出之前正在移动。我在Stackoverflow的其他答案中尝试了很多,但没有运气。 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来显示弹出窗口,控制点击确认/取消弹出设置您的片段。
谢谢。它终于奏效了。用你给出的代码和线索,我已经尝试了最后一次,它的工作。我的天啊 –