我正在考虑在我的项目中添加过度滚动(而不是颜色变化),但即使在阅读了API文档和这里的几个问题后,我仍然不明白我需要做些什么才能让它工作。
根据OverScroller的API文档:“此类封装了滚动功能,可以超出滚动操作的范围。在大多数情况下,此类是Scroller的直接替代。”
我之前在父类中有一个Scroller对象:
public boolean onTouchEvent(MotionEvent ev) {
....// code to calculate deltas
if (deltaY != 0 || deltaX != 0)
scrollBy(deltaX, deltaY);
}
我去改变它:
if (deltaY != 0 || deltaX != 0)
overScrollBy(deltaX, deltaY, getScrollX(), getScrollY(),
child.getRight() - getWidth(), child.getBottom() - getHeight(),
OVERSCROLL_DISTANCE, OVERSCROLL_DISTANCE, false);
现在滚动根本不起作用! fling()
可以替代但不能滚动....
总之,我有两个问题:
overScrollBy
一起使用?我是否必须添加其他代码才能使其正常工作?mScroller.fling()
且仅overScrollBy()
?为什么不mScroller.overScrollBy()
?它是否以某种方式构建到View
类中?这可能是非常明显的,但我在这里挣扎。任何帮助都将非常感谢,谢谢!
答案 0 :(得分:0)
可能是因为这个?
public class ViewConfiguration{
...
/**
* Max distance in dips to overscroll for edge effects
*/
private static final int OVERSCROLL_DISTANCE = 0;
...
}
答案 1 :(得分:0)
关于 overScrollBy
,documentation 说:
调用此方法的视图应覆盖 onOverScrolled(int, int, boolean, boolean)
以响应过度滚动操作的结果。
正如您在阅读 source code 时发现的那样,overScrollBy
本身不执行任何滚动,但它在最后调用 onOverScrolled
。
因此,要使滚动发生,您应该在 View 类中添加如下内容:
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
scrollTo(scrollX, scrollY);
}
overScrollBy
是 View
类的一个方法,用于滚动视图内容(通过 onOverScrolled
)。
OverScroller
类只是对滚动进行一些计算,例如使用 mScroller.fling()
或 mScroller.springBack()
,但需要进一步调用以实际滚动视图内容,通常使用:
@Override
public void computeScroll() {
if(mScroller.computeScrollOffset()) {
scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
invalidate();
}
}