我有Viewpager
我horizantalscrollview
内viewpager.Horizantalscrollview
包含2个布局。我的目的是horizantalscrollview
禁用,当我点击按钮时它从右向左滚动。我做到了,但我的问题是viewpager
无法正常工作。
我试过这个:
public class CustomHorizontalScrollView extends HorizontalScrollView {
private boolean canScroll = false;
private scrollListener listener=null;
public CustomHorizontalScrollView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public CustomHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomHorizontalScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
if (this.canScroll) {
return super.onTouchEvent(ev);
} else {
return false;
}
}
public void enableScroll() {
this.canScroll = true;
}
public void disableScroll() {
this.canScroll = false;
}
public void setListener(scrollListener listener) {
this.listener = listener;
}
}
我希望我能很好地解释我的问题。谢谢你的帮助。
答案 0 :(得分:0)
我认为ViewPager
无效的原因是因为HorizontalListView
消耗了所有TouchEvents
。
处理此问题的一个好方法是方法requestDisallowInterceptTouchEvent()
。
@Override
public boolean onTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
if (this.canScroll) {
// Disallow ViewPager to intercept touch events.
getParent().requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(ev);
} else {
// Allow ViewPager to intercept touch events.
getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
}
更新2014-02-04
您的按钮也会消耗TouchEvents
。我找到了interesting discussion on google groups。请阅读它,有两种可能的解决方案:
android:scrollHorizontally="false"
(您也可以以编程方式执行此操作:setHorizontallyScrolling(false)
)ViewPager
的{{3}}和onTouchEvent()
。