似乎三星禁用了他们的过度滚动(可能是由于苹果套装)。
我有一个扩展ScrollView
和覆盖
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY,int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)
{
...
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, 0, metrics.widthPixels,isTouchEvent);
}
在其他所有设备上(当然是姜饼),当滚动器到达它时,正在调用overScrollBy
,用户实际上可以过度滚动视图。
在Android 2.3.5+上,三星实施了一种完全禁用过度滚动的机制(不仅仅是他们的过度滚动实现,还包括Android的实现),每次用户尝试过度滚动时,都会打印以下LogCat事件:
02-13 16:02:34.230: D/BounceScrollRunnableDefault(15783): run(), TimeFraction=0.5225, mBounceExtent=7.273352
有没有办法解锁三星在那里做的事情?或者也许是另一种创建过度滚动的方式?
答案 0 :(得分:3)
我刚遇到同样的问题,最后提出了以下自定义过卷检测:
listView.setOnTouchListener(new OnTouchListener() {
private static final float OVERSCROLL_THRESHOLD_IN_PIXELS = 70;
private float downY;
@Override
public boolean onTouch(View v, MotionEvent event) {
int firstVisibleItem = listView.getFirstVisiblePosition();
int totalItemCount = listView.getCount();
int visibleItemCount = listView.getChildCount();
boolean onTop = firstVisibleItem == 0 && listView.getChildAt(0) != null && listView.getChildAt(0).getTop() == 0;
boolean onBottom = firstVisibleItem + visibleItemCount == totalItemCount && listView.getChildAt(visibleItemCount-1).getBottom() == listView.getHeight();
if(onTop || onBottom) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
downY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
float deltaY = event.getY() - downY;
if(onTop && deltaY > OVERSCROLL_THRESHOLD_IN_PIXELS) {
// Top overscroll
}
if(onBottom && -deltaY > OVERSCROLL_THRESHOLD_IN_PIXELS) {
// Bottom overscroll
}
break;
}
}
return false;
}
});
答案 1 :(得分:3)
问题解决了,我创建了自己的OverScrollView,欢迎您使用它。 https://github.com/EverythingMe/OverScrollView