gpt4 book ai didi

android - 带页面指示器的无尽自动 ScrollView 寻呼机

转载 作者:行者123 更新时间:2023-11-29 23:17:22 25 4
gpt4 key购买 nike

我必须构建具有无限自动滚动功能的 View 寻呼机。我还需要在 View 寻呼机下方显示一个页面指示器,它应该根据滚动事件做出响应。目前我已经为无限自动滚动应用了以下逻辑:

public void setupAutoPager(final int size) { 最终处理程序 handler = new Handler();

    final Runnable update = new Runnable() {
public void run() {
promotionViewPager.setCurrentItem(currentPage);
if (currentPage >= size - 1) {
currentPage = 0;
} else {
++currentPage;
}
}
};

Timer timer = new Timer();
timer.schedule(new TimerTask() {

@Override
public void run() {
handler.post(update);
}
}, 500, 2500);
}

问题:当第一个项目再次从自动滚动的最后一个项目出现时, View 寻呼机的动画在再次到达位置时处于向后方向(看起来像往回闪烁),而当从第一个元素自动滚动到第二个元素时,然后是动画向前方向(转到下一个元素)。我希望动画应该始终向前。当我将 View 寻呼机的当前项目设置为到达结束时的 0 位置时,出现向后动画。如何实现。

最佳答案

我知道这篇文章已经发布几个月了,但我是构建 Android 应用程序的初学者,而且我面临着同样的问题。我会尝试以下方法,即使它看起来绝对不是最佳的....

  1. 在您的适配器类中构建一个数组,它将包含您的所有 fragment 。
  2. 用您要显示的 fragment 填充此数组。诀窍是在列表末尾添加第一个 fragment ,并在 ViewPager 完成更改后将其删除。
  3. 用您的数组覆盖以下方法 getItem(int position)getCount() :return yourFragmentArray.get(position); & return yourFragmentArray.size();
  4. 想法是用相同的 fragment 一遍又一遍地填充 ViewPager(如果需要,添加新的 fragment )并删除您用来填充 VP 的 fragment ,这样您就永远不会返回。<
  5. 所以如果我接受你的代码,我会做这样的事情:

private int size = yourFragmentArray.size();

public void setupAutoPager(final int size) {

final Handler handler = new Handler();

currentPage = promotionViewPager.getCurrentItem();

final Runnable update = new Runnable() {
public void run() {
if (currentPage == size - 1) {

// Add the fragment to your fragmentArray
// Only the rank 0 needs to be taking care, works like in queue

yourFragmentArray.add(yourFragmentArray.get(0));

// Notify the changes made
yourAdapter.notifyDataSetChanged();

// Set the next item
promotionViewPager.setCurrentItem(currentPage + 1);

yourFragmentArray.remove(0);

// Update the size
size += 1;

}
else {
promotionViewPager.setCurrentItem(currentPage + 1);
}
}
};

Timer timer = new Timer();
timer.schedule(new TimerTask() {

@Override
public void run() {
handler.post(update);
}
}, 500, 2500);
}

逻辑在我这里,这可能不是最好的方法,但我现在看不到另一个。

祝你好运!我会在自己测试后尽快更新这篇文章。

更新:

一个更好的方法是添加这个方法:

  • 在调用方法之前将 ViewPager 的大小保存到特定变量 firstMaxSize
  • 使用计数器(如果这是您第一次遍历适配器 fragment ,我们不会删除它们),但是if(counter != 0) 我们将遍历yourFragmentArray() 并从 0 移除到 firstMaxSize

  • 调用yourAdapter.notifyDataSetChanged()

  • 然后重新添加新 fragment 。如果已经存在的 fragment 出现问题,则根据这个 fragment 的内容创建一个新的 fragment 。

  • 再次调用yourAdapter.notifyDataSetChanged()

它确实很重,我很确定还有另一种最简单的方法,但还没有找到。

关于android - 带页面指示器的无尽自动 ScrollView 寻呼机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55091027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com