Java Android:Viewpager OnPageChangeListener onpageselected干扰幻灯片动画
我在这里看到过一些类似的帖子,但没有合适的答案 我使用viewpager中选择的事件onpageselected执行一个函数。此函数依赖于网络,因此可能需要一些时间。但是幻灯片动画看起来很滞后Java Android:Viewpager OnPageChangeListener onpageselected干扰幻灯片动画,java,android,listview,android-fragments,android-viewpager,Java,Android,Listview,Android Fragments,Android Viewpager,我在这里看到过一些类似的帖子,但没有合适的答案 我使用viewpager中选择的事件onpageselected执行一个函数。此函数依赖于网络,因此可能需要一些时间。但是幻灯片动画看起来很滞后 mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, in
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i2) {
}
@Override
public void onPageSelected(int i) {
makeSomeHeavyTask();
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
繁重的任务:
public void makeSomeHeavyTask() {
handler.post(new QueryRunnable());
}
有办法解决这个问题吗?谢谢使用
异步任务
完成繁重的任务。在这里查看接受的答案
编辑:首先需要在
getView
中返回占位符。如果getView
方法必须等待线程完成,那么动画肯定会延迟。返回的占位符可以在线程完成后用于发布。您可以使用回调
public void onPageScrollStateChanged(int i)
而不是public void onPageSelected(int i)
if(i == ViewPager.SCROLL_STATE_IDLE) {
//your task
}
如果您有无法在其他线程上执行的任务。这将在动画完成后调用。我们有没有可能看到代码?您是否在一个单独的线程中执行“重任务”而不影响主UI?@MartinCazares这就是我要查询的代码:)是的,它应该在一个单独的线程中。
handler.post(new QueryRunnable())如果处理程序是在mainLooper上创建的(例如在活动/片段中),则代码>将不会在另一个线程上运行QueryRunnable()。我已经通过处理程序在另一个线程中创建了该处理程序。(请参见函数makesomeheavytask()中的内容。有没有办法在异步任务中制作幻灯片动画?!动画只能在UI/主线程中完成。其他所有内容都可以卸载到线程中。只有在繁重的任务没有操纵UI的情况下,如果您希望在页面发生变化时更改视图,这才有效。