gpt4 book ai didi

android - 如何在 ViewPager 中禁用 Horizo​​ntalScrollView 的滚动

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:15 24 4
gpt4 key购买 nike

我在 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 中的下一个位置。

知道如何让它变得更好吗?

最佳答案

为了解决这个问题,我遵循了以下步骤:

首先我创建了一个自定义的 Horizo​​ntalScrollView 类:

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 中禁用 Horizo​​ntalScrollView 的滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23889951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com