1

次の問題があります。30以上の画像をHorizo​​ntalScrollViewに配置しました。水平スクロールビューでこのメソッドをオーバーライドすることにより、onScroll()を正しく検出しています。問題は、ユーザーが近くにある画像のみをロードする必要があるか、ダウンロード/メモリ内などが多すぎることです。したがって、ユーザーが今すぐ高速にスクロールすると、スクロールの開始から終了まですべてのダウンロードが開始されます。これは100枚の画像である可能性がありますが、スクロールの最後では、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をオーバーライドして、Horizo​​ntalScrollViewのonScrollView内で呼び出されるコールバックIHorizo​​ntalScrollListenerを追加する必要がありました。viewGroupContainerは、ImageViewsのコンテナLinearLayoutです。スクロールビューには直接1つの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 に答える