2

特定のミリ秒あたりの特定のピクセル数を指定して、WebView に読み込まれたページを上から下に自動スクロールしたいと考えています。このスレッドを見たことがあります: +Android Webview - how to autoscroll a page? しかし、他の多くのスレッドでは、これにタイマーを使用するのは悪い考えだと彼らは言っているので、ハンドラーにこのチュートリアルを使用しました: ハンドラーを作成します。今私のコードは次のようになります:

private Handler mHandler=new Handler();

private Runnable mScrollDown = new Runnable()
{
    public void run()
    {
        WebView webview = (WebView)findViewById(R.id.web_url);
        webview.scrollBy(0, scrollSpeed);
        mHandler.postAtTime(this, 200);
    }
};

一度だけ呼び出すと(再度呼び出す最後の行を削除すると)、機能し、ダウンして停止します。ただし、このコードで徐々に下にスクロールしようとすると、ビューが無効化されていないようです (または、無効化されているが再描画されていません)。デバッガーで WebView の mScrollY プロパティが増加していることがわかりますが、ビューは移動しません。

私の推測では、システムはビューへのすべての変更が再描画されるのを待っていると思います。反復ごとにビューを更新する方法、またはこれを行うためのより良い方法はありますか?

注: ページの終わりチェックと停止ボタンは、質問とは無関係であるため、そこには配置しませんでした。

4

2 に答える 2

3

答えが見つかりました。

private Runnable mScrollDown = new Runnable()
{
    public void run()
    {
        WebView webview = (WebView)findViewById(R.id.web_url);
        webview.scrollBy(0, scrollSpeed);
        mHandler.postDelayed(this, 200);
    }
};

postAtTime の代わりに postDelayed を使用すると修正されました。postAtTime(runnable,0) はループを開始するために機能しますが、postAtTime は 2 番目のパラメーターとして時間を想定しています。描画する要素。postDelayed は、再度実行する前に数ミリ秒待機することを想定しています。これにより、システムはウィンドウを再描画して他のイベントを実行する時間が残ります。

于 2013-02-04T04:17:30.567 に答える
0
ScrollView scroll = (ScrollView) findViewById(R.id.scroll);
scroll.scrollTo(0, webview .getTop());//if want to go on top
scroll.scrollTo(0, webview .getBottom());//if want to go on top
于 2013-02-01T07:45:32.177 に答える