Horizo​​ntalScrollView是否存在onScrollStop()事件?

时间:2013-01-01 23:33:53

标签: android

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

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

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

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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();

                    }   

                }});
}