【发布时间】:2011-10-22 14:35:11
【问题描述】:
我正在制作一个文档阅读器应用程序,我希望用户能够要求该应用程序自动滚动文档而不是手动滚动。请任何人都可以给我关于如何垂直制作ScrollView“自动滚动”的想法吗?有点像电影结尾的演职员表。我在下面设置了一个 TimerTask,但我的问题是:
如何获取增量值以输入 TimerTask,即每次运行 TimerTask 时滚动条应到达的新位置。
有没有更好的方法来实现这个自动滚动功能?
我的代码在下面,我实现了自动滚动,但滚动甚至没有......(对 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 + Handler 来执行重复。现在运行滚动代码时
int scrollPos = (int) (scrollView.getScrollY() + 10.0);
scrollView.smoothScrollTo(0, scrollPos);
在 AsynTask 中,我收到一个错误,但是当我直接在 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);
【问题讨论】:
标签: android