[英]2 ViewPager not scrolling in Android 2.3
我在我的应用程序中使用导航抽屉,其中包含一些碎片,如下图所示。
每个片段包含另一个ViewPager,它是一个ImageSlider,下面是Listview,在顶部我使用的是SwipeRefreshLayout。 我的问题是图像滑块在Android 3.0或更高版本的设备上运行良好,但向左或向右滑动不适用于设备2.3及更低版本,而是调用父ViewPager的滑动,即导航片段。 我正在使用支持版本4库来支持低于3.0的设备。 除了那一个,所有功能在2.3设备上运行良好。 我用谷歌搜索了它,但我在任何地方都没有找到任何帮助。 因此,为了让它滚动我应该为此做什么,任何想法/帮助将受到高度赞赏。
您可以将此ViewPager
用作父ViewPager
。 这允许子ViewPager
滚动。
public class CustomViewPager extends ViewPager {
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
try {
//Handle the issue only in lower versions of android
if (v != this && v instanceof ViewPager && CJRAppCommonUtility.getOSVersion() < android.os.Build.VERSION_CODES.HONEYCOMB) {
ViewPager viewPager = (ViewPager) v;
int currentPage = viewPager.getCurrentItem();
int size = viewPager.getAdapter().getCount();
//if ViewPager has reached its end and if user tries to swipe left allow the parent to scroll
if (currentPage == (size - 1) && dx < 0) {
return false;
}
//if ViewPager has reached its start and if user tries to swipe right allow the parent to scroll
else if (currentPage == 0 && dx > 0) {
return false;
}
//Allow the child to scroll hence blocking parent scroll
else {
return true;
}
}
return super.canScroll(v, checkV, dx, x, y);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
关于在Viewgroup
处理触摸事件,Android开发者网站有一个很好的解释。 您可以在此处参考: http : //developer.android.com/training/gestures/viewgroup.html
希望能帮助到你!!
在旧版本的Android中,requestDisallowInterceptTouchEvent不起作用。 这里的解决方案是扩展视图寻呼机并覆盖onInterceptTouchEvent并存储可滚动的子列表。 然后,当调用onInterceptTouchEvent时,您可以遍历可滚动子项列表,获取其命中rect,并查看触摸事件是否在命中rect内。 如果是,你可以返回false以不处理它并让孩子接受它。
像这样的东西:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
for (View view : scrollableChildren)
{
// get the hit rectangle for the view
Rect rect = new Rect();
view.getHitRect(rect);
// check to see if the click was inside this child
if (rect.contains((int) ev.getX(), (int) ev.getY()))
{
return false;
}
}
return super.onInterceptTouchEvent(ev);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.