【问题标题】:Samsung Galaxy S2 2.3.5+ not calling overScrollBy()三星 Galaxy S2 2.3.5+ 不调用 overScrollBy()
【发布时间】:2012-02-13 14:07:50
【问题描述】:

似乎三星禁用了他们的过度滚动(可能是由于苹果套装)。

我有一个扩展 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);
    }

在所有其他设备上(当然是 Gingerbread 及更高版本),当滚动条到达终点时,overScrollBy 会被调用,并且用户实际上可以过度滚动视图)。

在 Android 2.3.5+ 上,三星已经实现了某种完全禁用过度滚动的机制(不仅仅是他们的过度滚动实现,还有 Android 的实现),每次用户尝试过度滚动时,都会打印以下 LogCat 事件:

02-13 16:02:34.230: D/BounceScrollRunnableDefault(15783): run(), TimeFraction=0.5225, mBounceExtent=7.273352

有什么方法可以解锁三星在那里所做的事情吗?或者也许是另一种创建超卷轴的方法?

【问题讨论】:

  • ...fiddler 下面的替代作品...

标签: android galaxy android-scrollview android-2.3-gingerbread android-overscoll


【解决方案1】:

我刚遇到同样的问题,最后想出了以下自定义过度滚动检测:

    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;
        }
    });

【讨论】:

  • 我会在适当的时候尝试一下。
【解决方案2】:

问题解决了,我自己创建了OverScrollView,欢迎大家使用。 https://github.com/EverythingMe/OverScrollView

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
相关资源
最近更新 更多