Saa*_*ooq 5 android android-viewpager
我ViewPager在我的应用程序中使用了一个水平布局的图像来实现一个Paginated画廊.
当我单独测试视图时,即作为活动的主视图时,它工作正常.但是,当我将其作为另一个布局的一部分包含在内时,滚动(或轻弹)会变得怪异.如果在滑动的中途看起来似乎重置到原来的位置(真正的快速弹跳是我到目前为止唯一的工作).
任何想法可能是什么问题?
如果它具有任何相关性,则视图会从XML中膨胀并添加到PagerAdapter继承的类中.
是的,ViewPager默认情况下,其他滚动项目不能很好地协同工作.当我必须做这些事情的时候,我通常ViewPager会做一些子类来制作一些可以滚动的孩子.然后在我的onInterceptTouchEvent()I中检查命中矩形是否在该孩子内并且不拦截触摸事件,以便孩子对它进行打击.像这样的东西:
/**
* Override to not intercept touch events within our scroller if it exists.
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if(scrollerId != 0) {
View scroller = findViewById(scrollerId);
if(scroller != null) {
Rect rect = new Rect();
scroller.getHitRect(rect);
if(rect.contains((int)ev.getX(), (int)ev.getY())) {
return false;
}
}
}
return super.onInterceptTouchEvent(ev);
}
Run Code Online (Sandbox Code Playgroud)
然后你需要的是一种设置scrollerId方法(一个简单的公共方法工作).
注意另一种方法是,如果你使用的是ScrollView用于垂直滚动的元素ViewPager 孩子,你需要去不同的方向.有一个子类ScrollView检测垂直滚动方向和水平滚动的保释,以便ViewPager选择它.
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
lastX = ev.getX();
lastY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - lastX);
yDistance += Math.abs(curY - lastY);
lastX = curX;
lastY = curY;
if (xDistance > yDistance)
return false;
}
return super.onInterceptTouchEvent(ev);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2524 次 |
| 最近记录: |