2011-10-21 6 views
3

私はドキュメントリーダーアプリを作成しています。ユーザーが手動スクロールの代わりにドキュメントの自動スクロールをアプリに依頼できるようにしたい。スクロールビューを「オートスクロール」にする方法を教えてください。映画の終わりに一種のクレジット。私は、以下これにTimerTaskをを設定しますが、私の問題は、次のとおりです。Android + ScrollViewまたはTextViewに垂直方向の「自動スクロール」機能を追加する方法

  1. にはどうすればすなわちスクロールバーがTimerTaskをを実行するたびに行くべき新しい位置TimerTaskをに供給するためのインクリメント値を取得します。

  2. この自動スクロール機能を実現する方法はありますか?

私のコードは以下のとおりですが、私は自動スクロールを達成しましたが、スクロールも...(JavaとAndroidの両方に新しいものです...)ありがとう!!!

Timer scrollTimer = new Timer(); 
Handler handler = new Handler(); 
ScrollView scrollView = (ScrollView) findViewById(R.id.hse); 
int scrollSpeed = 5; // this is set by the user in preferences 

TimerTask scrollerSchedule = new TimerTask() { 
     @Override 
     public void run() { 

      handler.post(new Runnable() { 

       @Override 
       public void run() { 
        //Here I want to increment the scrollbar's vertical position by 10 
     //scrollView.smoothScrollBy(0, scrollView.getScrollY() + 10); 
            new moveScrollView().execute(); 
       } 
      }); 
     } 
    }; 

    scrollTimer.schedule(scrollerSchedule, 0, scrollSpeed * 100); 

} 

private class moveScrollView extends AsyncTask<Void, Void, Void> { 

    protected void onProgressUpdate(Void... progress) { 
     // show the user some sort of progress indicator 
     // like how many minutes before scroll is completed 

    } 

    protected Void doInBackground(Void... params) { 
     // TODO 
     int scrollPos = (int) (scrollView.getScrollY() + 10.0); 
     scrollView.smoothScrollTo(0, scrollPos); 
     return null; 
    } 

} 

変更:同様@Kurtisが提案、私はスクロールを実行するためにAsyncTaskを加え、次いで繰り返しを行うにはTimerTaskを+ハンドラを使用していました。今AsynTaskにスクロールコード

int scrollPos = (int) (scrollView.getScrollY() + 10.0); 
scrollView.smoothScrollTo(0, scrollPos); 

を実行すると、私はエラーを取得するが、私は私のRunnableで直接コードを実行すると期待どおりに動作します。私はまだ効率を心配していて、本当にAsynTaskを使いたいと思っています。私のAsyncTaskコードを修正するためのヒント?


私は(私のような初心者のための)私の観察でした。以前私は

scrollView.smoothScrollBy(0, scrollView.getScrollY() + 10); 

を使用してスクロールではなく、5、5、5のようにも繰り返しの....ソートの+5、+10 +15 +のようなスクロール値をインクリメントし、不均一ジャンプスタート....私が知ったのは、scrollView.getScrollY()+ 10のような増分値を計算したければ、smoothScrollBy()の代わりにsmoothScrollTo()を使用していたはずです。

scrollView.smoothScrollTo(0, scrollView.getScrollY() + 10); 

答えて

0

あなたはあなたのための繰り返しを行うには、あなたとAlarmManagerのためのスクロールを行うためにAsyncTaskの組み合わせを使用する必要があります。高レベルで、あなたがすべきことは、放送であるPendingIntentを作成することです。あなたの活動では、PendingIntentが持つブロードキャストの種類を受け取るブロードキャスト受信者を作成します。受信者がブロードキャストを受信するたびに、doInBackgroundメソッドがdoInBackgroundメソッドを起動する必要があります。

scrollView.smoothScrollBy(0, scrollView.getScrollY() + 10); 

注意してください。アクティビティが一時停止すると(つまりonPauseメソッドで)、アラームマネージャで作成したアラームを必ずオフにしてください。あなたがしなければ、あなたは一度も利用されない放送の束を発砲するだろう。これによりユーザーのバッテリーが消耗します。その後、onResumeメソッドでアラームをオンに戻す必要があります。

アラームマネージャにアラームを設定するときは、ELAPSED_REAL_TIMEを必ず使用してください。それ以外の場合、スクロール速度はデバイス上のプロセッサの速度によって異なります。ブロードキャストが送信される時間間隔を調整して、ビューのスクロールを高速または低速にすることができます。

P.S.

スレッディングの詳細については、Painless Threadingの記事をご覧ください。

+0

Ok Kurtis、plsにコードガイドを教えてもらえますか?私はJavaとAndroidのプログラミングにはまったく新しい...約5日...笑。 – Tochie

+0

あなたのリンクを見ただけです。私はそれらを見て、戻ってきます。ありがとう! – Tochie

+0

私がAsynTaskのためにあなたに与えたドキュメンテーションのリンクは、それらを使用する方法に関するものがたくさんあります。あなたはそれを試しましたか? –

8

これはSlideshowデモです。自分のアプリのクレジットを表示するために作成しました。そのソースは、どのように進めるかのアイデアを提供します。

ソースをダウンロードして、Eclipseを試用するためにプロジェクトをインポートすることができます。

+0

@Blessnm、そうするでしょう。ありがとう! – Tochie

+0

@blessenm grt仕事の男..ありがとう – bCliks

関連する問題