2011-10-21 81 views
3

我正在製作文檔閱讀器應用程序,我希望用戶能夠讓應用程序自動滾動文檔而不是手動滾動。請任何人都可以給我一些關於如何垂直製作ScrollView「Auto-Scroll」的想法嗎?電影結尾處的類似點數。我成立了一個TimerTask這個下面,但我的問題是:Android +如何將垂直「自動滾動」功能添加到ScrollView或TextView

  1. 如何獲得增量值送入的TimerTask即新位置的滾動條應該去每個TimerTask的運行時間。

  2. 有沒有更好的方法來實現這種自動滾動功能?

我的代碼如下,我實現了自動滾動,但滾動甚至沒有...(對Java和Android..smile全新)...謝謝!!!

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一樣,+10 +15 + ...,而不是一個甚至重複像+5,+ 5,+ 5 ....我發現如果我想計算像scrollView.getScrollY()+ 10這樣的增量值,那麼我應該使用smoothScrollTo()而不是smoothScrollBy()。

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

回答

0

您應該使用的AsyncTask組合做滾動你和AlarmManager做重複的爲您服務。在高層次上,你應該做的是創建一個廣播的PendingIntent。在您的活動中創建一個接收PendingIntent將具有的廣播類型的廣播接收器。每一個reciever臨危播出時間是應該推出一個AsynTask其doInBackground方法就是:

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

不過要小心。當您的活動暫停時(即在onPause方法中)時,確保關閉使用鬧鐘管理器創建的鬧鐘。如果你不這樣做,你會發射一堆從未使用過的廣播節目。這將耗盡用戶電池。然後您應該在onResume方法中重新打開警報。

其他一些注意事項,請確保在鬧鐘管理器中設置鬧鐘時使用ELAPSED_REAL_TIME。否則,您的滾動速度將隨着設備上處理器的速度而變化。您可以調整發送廣播的時間間隔,以使視圖更快或更慢地滾動。

P.S.

有關線程的更多建議,請查看Painless Threading文章。

+0

Ok Kurtis,請問你能給我一些代碼指導嗎?我對Java和Android編程完全陌生......大約5天前......大聲笑。 – Tochie

+0

好的,只是看到你的鏈接。我會查找他們並回來。謝謝! – Tochie

+0

我給你AsynTask的文檔鏈接有一堆關於如何使用它們的東西。你試過了嗎? –

8

這是我創建的Slideshow演示程序,用於顯示我的某個應用程序的積分。它的來源會讓你知道如何進行。

您可以下載源代碼並將項目導入到eclipse中試用。

+0

@Blessnm,會做。謝謝! – Tochie

+0

@blessenm grt工作夥計..謝謝 – bCliks

相關問題