0

ViewPager で WebView を使用して、インターネットから画像を表示しています。ズーム コントロールが組み込まれているため、WebView が使用されます。ユーザーがページャーで画像をズームできるようにしたいのですが、次の画像にスワイプすると、前の画像の元のズームが復元されます。私はいくつかのことを試しましたが、そのうちの1つだけが私が望む機能を提供してくれましたが、ページをスワイプすると点滅するため、十分な解決策ではありません.

mPager.setOnPageChangeListener(new OnPageChangeListener(
            ) {

        @Override
        public void onPageSelected(int arg0) {
            currImg = arg0;
            //System.out.println("On page selected");
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub
            //System.out.println("On page scrolled");

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub
            if(arg0 == 2) {
                //mPager.getAdapter().
                mPager.getAdapter().notifyDataSetChanged();
                System.out.println("Notifying Data Set Changed " + mPager.getCurrentItem());
            }

        }
    });

ViewPager アダプターで getItemPosition をオーバーライドしたので、POSITON_NONE が返されます。スワイプするたびにページが更新され、ページ間の移行がスムーズに行われないため、これは適切な解決策ではありません。どんな提案でも大歓迎です。

4

3 に答える 3

1

これは、ページを最初のズーム状態に戻す最良の方法であることが示されています。

    pager.setOnPageChangeListener(new OnPageChangeListener() {
        public void onPageScrollStateChanged(int arg0) {}
        public void onPageScrolled(int arg0, float arg1, int arg2) {}
        public void onPageSelected(int arg0) {
            System.out.println("onPageSelected -> arg0 = " + arg0);

            if (currPage != arg0) {
                mAdapter.notifyDataSetChanged();
                currPage = arg0;
            }
        }
    });

それよりも、アダプター クラスでは、次のように getItemPosition メソッドをオーバーライドします。

@Override
public int getItemPosition(Object object) {
    if (((ExtendedWebView) object).getScale() != webScale) {
        return POSITION_NONE;
    }
    return POSITION_UNCHANGED;
}
于 2012-09-06T11:02:37.350 に答える
0

ページを最初のズーム状態に戻すことはできますか?

于 2012-07-17T09:27:29.923 に答える
0

点滅の原因は、データを再度読み込んでビューを生成することです。おそらくほんの少しの点滅ですが、さらに多くのものを追加したり、ビューごとにダウンロードやストリーミングを追加したりすると、その点滅は次のようになります。白いページの読み込み。あなたができることは、最後のWebビューで現在のズームレベルを設定するコードを追加する必要があるページ変更リスナーです。

例:

lastPos = pos - 1;
((WebView) mPager.getChildAt(lastPos)).getSettings().setDefaultZoom(zoomLevel);

注:これは単なる例です。これがコードで機能する前に、構成に応じて何かを変更する必要がある場合があります。

この例では、WebView がビューページャーの各ページの唯一の子であると想定しています。複数のページがある場合、または WebView が相対レイアウトまたは線形レイアウト内にある場合は、コードを追加して WebView を取得し、変更を適用する必要があります。ズームで。

アップデート:

画像が webview 内のすべての画面を占めるようにしたい場合は、これを行うことができます。この場合、「web」は「WebView」タイプのオブジェクトです。幸運を。

web.loadData("<html><head></head><body><img src='" + url //IMAGE URL
+ "' style='width:100%;height:98%;max-width:100%;max-height:98%;'></body></html>",
"text/html", "utf-8"); //THIS WILL FIT THE IMAGE TO TAKE ALL THE SCREEN
于 2012-08-03T17:21:38.267 に答える