2011-10-21 184 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

相关问题