禁用&;在Android中启用ViewPager中的分页
我正在使用android兼容软件包版本4在我的应用程序中显示pdf页面。 我使用PagerAdapter和ViewPager来显示pdf页面,比如水平滚动视图 现在的问题是与分页相关的东西。我可以根据这个线程通过检测viewpager中的child来停止分页,但是当用户触摸到该视图之外的时候,我如何才能使其返回。我为CustomViewPager使用了以下代码禁用&;在Android中启用ViewPager中的分页,android,android-viewpager,Android,Android Viewpager,我正在使用android兼容软件包版本4在我的应用程序中显示pdf页面。 我使用PagerAdapter和ViewPager来显示pdf页面,比如水平滚动视图 现在的问题是与分页相关的东西。我可以根据这个线程通过检测viewpager中的child来停止分页,但是当用户触摸到该视图之外的时候,我如何才能使其返回。我为CustomViewPager使用了以下代码 public class CustomViewPager extends ViewPager { private bo
public class CustomViewPager extends ViewPager {
private boolean enabled;
private int childId;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = true;
}
public void setChildId(int childId) {
this.childId = childId;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean result = false;
View scroll = getChildAt(childId);
if (scroll != null) {
Rect rect = new Rect();
CommonLogic.logMessage("PDF Page Rectangle ", TAG, Log.VERBOSE);
scroll.getHitRect(rect);
if (rect.contains((int) event.getX(), (int) event.getY())) {
setPagingEnabled(false);
result = true;
}
}
return result;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean enabled) {
this.enabled = enabled;
}
}
当尝试触摸pdf页面外部时,if(scroll!=null)
在两个方向都变为真
有谁能帮我找出如何重新启用它,以便在ViewPager中继续分页。您将其设置为false,但没有理由将其重置为true。另外,你的拦截触摸逻辑似乎有点奇怪。。。唯一允许寻呼机拦截(从而在
onTouchEvent()
中处理)的时间是将paging enabled设置为false。下面呢
public class CustomViewPager extends ViewPager {
private boolean enabled;
private int childId;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = true;
}
public void setChildId(int childId) {
this.childId = childId;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean result = false;
View scroll = getChildAt(childId);
if (scroll != null) {
Rect rect = new Rect();
CommonLogic.logMessage("PDF Page Rectangle ", TAG, Log.VERBOSE);
scroll.getHitRect(rect);
if (rect.contains((int) event.getX(), (int) event.getY())) {
setPagingEnabled(false);
result = true;
}
}
return result;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean enabled) {
this.enabled = enabled;
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean result = true;
View scroll = getChildAt(childId);
if (scroll != null) {
Rect rect = new Rect();
CommonLogic.logMessage("PDF Page Rectangle ", TAG, Log.VERBOSE);
scroll.getHitRect(rect);
if (rect.contains((int) event.getX(), (int) event.getY())) {
setPagingEnabled(false);
result = false;
} else {
setPagingEnabled(true);
}
}
return result;
}
我在分页图像文件时遇到了类似的问题,这些文件需要收缩才能缩放。简单地说,需要一种方法,在放大图像时禁用分页,在显示整个图像时启用分页。我是这样解决的,我想你也可以做类似的事情。 第一个扩展:MyViewPager类扩展ViewPager{…} 然后在该类中重写以下两个方法
@Override
public boolean onTouchEvent(MotionEvent event) {
if (YOUR_CRITERIA_TOENABLE_DISABLE) {
return true;
} else {
return super.onTouchEvent(event);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return super.onInterceptTouchEvent(event);
}
确保在xml布局或从代码动态创建中使用视图寻呼机
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean enabled) {
this.enabled = enabled;
}
将“return false”替换为“return this.enable”,并将this.enable的默认值设置为false