我使用Android兼容包版本4在我的应用程序中显示pdf页面。 我使用过PagerAdapter& ViewPager用于显示水平滚动视图等pdf页面。
现在问题在于分页相关的东西。我能够通过根据这个线程android: ViewPager and HorizontalScrollVIew检测viewpager中的子节点来停止分页,但是当用户触摸到该视图之外时,我该如何才能启用它。我使用了以下CodeViewPager代码。
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中继续分页。
答案 0 :(得分:3)
我遇到了与需要捏缩放的分页图像文件类似的问题。简单地说,需要一种方法来在图像放大时禁用分页,并在显示整个图像时启用它。我这样解决了,认为你可以做类似的事情。 首先扩展:类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布局中使用视图寻呼机或从代码中动态创建。
答案 1 :(得分:1)
@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
答案 2 :(得分:0)
您将其设置为false,但无法将其重置为true。此外,你的拦截触摸逻辑看起来有点奇怪...你只允许寻呼机拦截(从而在onTouchEvent()
中进行处理)是你将寻呼设置为false时。以下怎么样?
@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;
}