3 回答

TA貢獻1895條經(jīng)驗 獲得超7個贊
我有同樣的問題。我的解決方案是:
成為的子類ViewPager并添加一個名為的屬性childId。
為該childId屬性創(chuàng)建一個setter 并設(shè)置ID HorizontalScrollView。
覆蓋onInterceptTouchEvent()的子類,ViewPager如果childId屬性大于0,則獲取該子項;如果事件在HorizontalScrollView區(qū)域中,則返回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條經(jīng)驗 獲得超0個贊
謝謝回復(fù)。我稍微修改了您的解決方案,并設(shè)法使嵌套的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 關(guān)注
- 421 瀏覽
添加回答
舉報