2

ビューページャーに表示する多くの WebView があります。WebView をドラッグするたびに、invidate() が実行されて再描画されます。WebView が非常に複雑な場合、再描画に時間がかかるため、スクロールがスムーズではありません。 webview で setDrawingCacheEnabled(true) を使用しますが、効果的ではありません。どうもありがとう!

4

1 に答える 1

1

1つの考えは、PageChangeListenerを使用して、フォーカスされているビューと、ユーザーがビューをドラッグしているかどうかを検出することです。

PageChangeListenerには、次のようなメソッドオーバーライドがあります。スクロール状態をオンに切り替えて、ビューを再描画/インスタンス化できる場合とそうでない場合を通知するプロパティを設定できます。

/**
 * Called when the scroll state changes. Useful for discovering when the user
 * begins dragging, when the pager is automatically settling to the current page,
 * or when it is fully stopped/idle.
 *
 * @param state The new scroll state.
 * @see ViewPager#SCROLL_STATE_IDLE
 * @see ViewPager#SCROLL_STATE_DRAGGING
 * @see ViewPager#SCROLL_STATE_SETTLING
 */
@Override
public void onPageScrollStateChanged(int state) {
    switch (state) {
    case ViewPager.SCROLL_STATE_IDLE:
        // Allow updating of views by view adapter
        this.isAnimating = false;
        break;
        /**
         * Indicates that the pager is currently being dragged by the user
         */
    case ViewPager.SCROLL_STATE_DRAGGING:
        // do not allow updating of views
        this.isAnimating = true;
        break;
        /**
         * Indicates that the pager is in the process of settling to a final position.
         */
    case ViewPager.SCROLL_STATE_SETTLING:
        this.isAnimating = true;
        break;
    }
}

ビューページャーにpagechangelistenerを追加するのは簡単です。

pageChangeListener = new PageChangeListener(viewIndicator, viewAdapter);
viewPager.setOnPageChangeListener(pageChangeListener);

次に、ユーザーがアクティブにスクロールしているときにWebビューが再描画されないようにするために、Webビューで何ができるかを調べます。頭に浮かぶ考えの1つは、Webビューで無効化をオーバーライドし、ユーザーがスクロールしておらず、ビューがアイドル状態の場合にのみ無効化することです。

于 2012-09-05T23:21:21.617 に答える