似乎三星禁止他们的过度滚动(可能是由于苹果套装).
我有一个扩展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,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
有没有办法解锁三星在那里做的事情?或者也许是另一种创建过度滚动的方法?
解决方法
我刚遇到同样的问题,最后提出了以下自定义过卷检测:
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; } });