1

我有以下问题。我在 Horizo​​ntalScrollView 中放置了 30 多个图像。我通过在 Horizo​​ntalScrollView 中覆盖此方法来正确检测 onScroll()。问题是我只需要加载用户附近的那些图像,否则将会有太多的下载/内存等。因此,如果用户现在快速滚动,它将开始下载从滚动开始到滚动结束的所有内容。这可能是一百张图片,但在滚动结束时,它们只有 4 或 5 张图片。如何检测滚动停止?并用它来开始下载?

编辑:对于慢速滚动它很完美,但快速滚动是问题所在。如果滚动很慢,那么行为是完美的。

编辑:我正在做的是更新 onScroll 附近的任何图像,但 onScroll 似乎被多次调用,并且很难确定图像是否应该从 onScroll 内部更新。例如 x=50, xPrev=49, xPrev=50, x=51 等等,实际上每个像素变化都会调用 onScroll。

谢谢

4

2 回答 2

1

您的图像在水平方向移动,您需要做的是找到移动图像的速度,并根据它加载图像或跳过它们,在 onScrollChanged 方法中获取当前时间,将其保存到变量中,并找到与旧时间的差异,如果距离即水平 x1 和 x2 的差异大于某个水平,例如屏幕宽度(用它进行实验),然后如果速度低于某个水平,则计算速度加载图像或以其他方式忽略,总是在空闲时加载图像,即当速度为零时。

于 2013-01-02T08:27:48.627 回答
0

无论如何都没有找到检测滚动结束但使用 CountDownTimer 似乎有效:

我还需要重写Horizo​​ntalScrollView 来添加一个回调IHorizo​​ntalScrollListener,它在Horizo​​ntalScrollView 的onScrollView 内部调用。viewGroupContainer 是 ImageViews 的容器 LinearLayout。滚动视图只能直接包含一个 ViewGroup,因此我将所有图像添加到视图组中。CountDownTimer 是在活动中维护的参考。

    hzScrollView.setScrollListener(new IHorizontalScrollListener(){

                @Override
                public void onScrollChanged(int l, int t, int oldl, int oldt) {
                    Log.i(TAG, "onScrollChanged to x="+l+" y="+t);
                    Log.i(TAG, "onScrollChanged from x="+oldl+ " y="+oldt);
                    if (scrollUpdateTimer == null)
                    {
                        scrollUpdateTimer = new CountDownTimer(30000, 1000){

                            @Override
                            public void onFinish() {

                                scrollUpdateTimerRunning = false;
                            }

                            @Override
                            public void onTick(long interval) {
                                Log.d(TAG, "onTick updateImageViews");
                                updateImageViews(hZScrollView, viewGroupContainer);
                            }};

                    }

                    if (scrollUpdateTimerRunning == false)
                    {
                        scrollUpdateTimerRunning = true;
                        scrollUpdateTimer.start();

                    }   

                }});
}
于 2013-01-02T00:48:52.747 回答