1

リストのスクロールのパフォーマンスを向上させるために、この提案を実装しました。これにより、パフォーマンスが確実に向上します。

私のものはそのように実装されています

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
    switch (scrollState) {
        case OnScrollListener.SCROLL_STATE_IDLE:
            adapter.busy = false;
            adapter.notifyDataSetChanged();
            break;
        case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
            adapter.busy = true;
            break;
        case OnScrollListener.SCROLL_STATE_FLING:
            adapter.busy = true;
            break;
    }
}

ただし、リストのスクロール速度が特定のしきい値を超えるとすぐに adapter.busy を false に設定することで、視覚的にもう少し魅力的なものにしたいと考えています。ただし、スクロール中にスクロール速度を判断する良い方法がわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

1

いつでもスクロール位置を取得できます。CountdownTimer を使用して最新のスクロール位置を定期的にチェックし、以前のスクロール位置と比較して方向と速度を決定します。動きが速すぎる場合は、それに応じて更新してください。実装したら、上記のように結果を投稿してください。(スクロール位置の変更イベントがある場合や、これを判断するためにおそらくフォーカス イベントの変更を利用する場合もあります)。

于 2012-07-12T01:32:42.207 に答える
0

同様のリクエストがあり、次のように機能します。MIN_VELOCITY に最適なものを試すだけで済みます

@Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
                int totalItemCount) {

            checkFlingVelocitySlowDown(firstVisibleItem, totalItemCount);
        }

int mLastScrollInTopItemPosition = 0;
long mLastTimeTopPositionChanged = System.currentTimeMillis();
final double MIN_VELOCITY = 0.01;
final int TOP_VIEW_ITEMS_RANGE = 3;
final int BOTTOM_VIEW_RANGE = 6;

void checkFlingVelocitySlowDown(int scrollInTopItemPosition, int totalItemCount) {
    try {
        if (mLastScrollInTopItemPosition != scrollInTopItemPosition) {
            long now = System.currentTimeMillis();
            long timeSpan = now - mLastTimeTopPositionChanged;
            double velocity = (timeSpan > 0) ? (1.0 / timeSpan) : 1000000;
            mLastScrollInTopItemPosition = scrollInTopItemPosition;
            mLastTimeTopPositionChanged = now;

            if (velocity <= MIN_VELOCITY ||
                    scrollInTopItemPosition <= TOP_VIEW_ITEMS_RANGE ||
                    (Math.abs(totalItemCount - scrollInTopItemPosition) < BOTTOM_VIEW_RANGE)) {
                // to what ever it should do when scroll closer to top or bottom, or fling is slowing down
            }
        }
    } catch (Exception e) {}
}
于 2016-04-18T11:57:00.457 に答える