作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 ViewPager 中放置了一个水平 ScrollView 。目标是仅使用软件触发水平 ScrollView 的滚动。所有滚动手势都应由 View 寻呼机处理。
我已经通过创建拦截所有滑动手势的自定义 View Pager 来做到这一点:
public class GreedyViewPager extends ViewPager {
GestureDetector mGestureDetector;
View.OnTouchListener mGestureListener;
public GreedyViewPager(Context context) {
super(context);
initGestureDetector(context);
}
public GreedyViewPager(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
initGestureDetector(context);
}
void initGestureDetector(Context context){
mGestureDetector = new GestureDetector(context, new ScrollDetector());
ViewConfiguration vc = ViewConfiguration.get(context);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev) || mGestureDetector.onTouchEvent(ev);
}
class ScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return true;
}
}
}
不幸的是,它并不适用于所有设备,有时我必须多次滑动轿跑车才能转到 ViewPager 中的下一个位置。
知道如何让它变得更好吗?
最佳答案
为了解决这个问题,我遵循了以下步骤:
首先我创建了一个自定义的 HorizontalScrollView 类:
public class MyScrollView extends HorizontalScrollView{
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX,boolean clampedY) {
Log.e(" horizontal ", " - "+scrollX);
// here i call the listener i have created
scrollViewListener.onHorizontalScrollChanged(scrollX, scrollY);
super.onOverScrolled(0, scrollY, true, true);
}
// i create a scroll view listener, and i instantiate this from main Activity
private ScrollViewListener scrollViewListener = null;
public interface ScrollViewListener {
void onHorizontalScrollChanged(int x, int y);
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
}
}
在您的 MainActivity 中实现这个:
implements MyScrollView.ScrollViewListener
@Override
public void onHorizontalScrollChanged(int x, int y) {
// In your ViewPager call this method
mPager.scrollBy(x, y);
}
同样在 onCreate 的 MainActivity 中,您必须添加:
// i have also added this custom HorizontalScrollView to my XML
MyScrollView myScrollView = (MyScrollView) findViewById(R.id.h_scroll);
myScrollView.setScrollViewListener(this);
我实现了这段代码并且对我有用,我希望它对你也有用:)
关于android - 如何在 ViewPager 中禁用 HorizontalScrollView 的滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23889951/
我是一名优秀的程序员,十分优秀!