3 回答
TA贡献1895条经验 获得超7个赞
我有同样的问题。我的解决方案是:
成为的子类ViewPager并添加一个名为的属性childId。
为该childId属性创建一个setter 并设置ID HorizontalScrollView。
覆盖onInterceptTouchEvent()的子类,ViewPager如果childId属性大于0,则获取该子项;如果事件在HorizontalScrollView区域中,则返回false。
码
public class CustomViewPager extends ViewPager {
private int childId;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (childId > 0) {
View scroll = findViewById(childId);
if (scroll != null) {
Rect rect = new Rect();
scroll.getHitRect(rect);
if (rect.contains((int) event.getX(), (int) event.getY())) {
return false;
}
}
}
return super.onInterceptTouchEvent(event);
}
public void setChildId(int id) {
this.childId = id;
}
}
在onCreate()方法中
viewPager.setChildId(R.id.horizontalScrollViewId);
adapter = new ViewPagerAdapter(this);
viewPager.setAdapter(adapter);
希望这个帮助
TA贡献1111条经验 获得超0个赞
谢谢回复。我稍微修改了您的解决方案,并设法使嵌套的ViewPagers工作:
public class CustomViewPager extends ViewPager {
private int childId;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (childId > 0) {
ViewPager pager = (ViewPager)findViewById(childId);
if (pager != null) {
pager.requestDisallowInterceptTouchEvent(true);
}
}
return super.onInterceptTouchEvent(event);
}
public void setChildId(int id) {
this.childId = id;
}
}
- 3 回答
- 0 关注
- 400 浏览
添加回答
举报