Java 如何停止滑块上的无限循环
我正在使用 这是我的代码:Java 如何停止滑块上的无限循环,java,android,slider,Java,Android,Slider,我正在使用 这是我的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDemoSlider = (SliderLayout)findViewById(R.id.slider); HashM
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDemoSlider = (SliderLayout)findViewById(R.id.slider);
HashMap<String,Integer> file_maps = new HashMap<String, Integer>();
file_maps.put("Hannibal",R.drawable.hannibal);
file_maps.put("Big Bang Theory",R.drawable.bigbang);
file_maps.put("House of Cards",R.drawable.house);
file_maps.put("Game of Thrones", R.drawable.game_of_thrones);
for(String name : file_maps.keySet()){
TextSliderView textSliderView = new TextSliderView(this);
// initialize a SliderLayout
textSliderView
.description(name)
.image(file_maps.get(name))
.setScaleType(BaseSliderView.ScaleType.Fit)
.setOnSliderClickListener(this);
//add your extra information
textSliderView.bundle(new Bundle());
textSliderView.getBundle()
.putString("extra",name);
mDemoSlider.addSlider(textSliderView);
}
mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);
mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
mDemoSlider.setCustomAnimation(new DescriptionAnimation());
mDemoSlider.stopAutoCycle();
mDemoSlider.addOnPageChangeListener(this);
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDemoSlider=(SliderLayout)findViewById(R.id.slider);
HashMap文件_maps=新HashMap();
文件_maps.put(“Hannibal”,R.drawable.Hannibal);
文件_maps.put(“大爆炸理论”,R.drawable.bigbang);
将地图归档放置(“纸牌屋”,R.drawable.House);
文件maps.put(“权力游戏”,R.drawable.Game\u of权力游戏);
for(字符串名称:file_maps.keySet()){
TextSliderView TextSliderView=新的TextSliderView(此);
//初始化幻灯片布局
文本幻灯片视图
.说明(姓名)
.image(文件_maps.get(名称))
.setScaleType(BaseSliderView.ScaleType.Fit)
.setOnSliderClickListener(本);
//添加您的额外信息
text sliderView.bundle(新bundle());
textSliderView.getBundle()
.putString(“额外”,名称);
mDemoSlider.addSlider(textSliderView);
}
mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);
mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_-Bottom);
setCustomAnimation(新的DescriptionAnimation());
mDemoSlider.stopAutoCycle();
mDemoSlider.addOnPageChangeListener(此);
}
有没有办法停止滑块上的无限循环。我读到我应该添加
mDemoSlider.stopAutoCycle()代码>但这没有任何效果。对不起,但是您不能。至少这个lib没有
我查看了代码,我发现这种“无限滚动”是默认行为,如果你想禁用它,你要么实现自己的滑块,要么为原始作者建议和编辑
“问题”在于SliderLayout.java
类的这两种方法:
/**
* move to next slide.
*/
public void moveNextPosition(boolean smooth) {
if (getRealAdapter() == null)
throw new IllegalStateException("You did not set a slider adapter");
mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1, smooth);
}
// ...
/**
* move to prev slide.
*/
public void movePrevPosition(boolean smooth) {
if (getRealAdapter() == null)
throw new IllegalStateException("You did not set a slider adapter");
mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1, smooth);
}
而setCurrentItem
位于ViewPagerEx.java
类中,您可以看到这种无限滚动是默认行为。(查看setCurrentItemInternal
方法)
void setCurrentItemInternal(整数项、布尔平滑滚动、布尔始终、整数速度){
如果(mAdapter==null | | mAdapter.getCount()=mAdapter.getCount()){
item=mAdapter.getCount()-1;
}
final int pageLimit=mOffscreenPageLimit;
如果(项目>(mCurItem+pageLimit)|项目<(mCurItem-pageLimit)){
//我们正在跳转一页以上。为了避免
//出现问题时,我们希望在视图中保留所有当前页面
//直到滚动结束。
对于(int i=0;i您的意思是,您想从滑块停止“自动播放”功能吗?我认为应该有一个函数setAuto_cycle(布尔);您可以尝试一下.“custom:auto_cycle=”false”“@Mauker否我已经停止了“自动播放”功能。我想防止,如果你在图像中滑动并到达滑块的末尾,然后再次滑动,那么应该不会发生任何事情,也不会从开始的图像开始。哦,现在我明白了…你的问题取决于那个家伙是如何实现这个滑块的,如果他没有编写这样的方法,你就必须编写自己的滑块,或者向那个家伙推荐这个功能。我会看看他的代码,看看是否有可能做到这一点。
void setCurrentItemInternal(int item, boolean smoothScroll, boolean always, int velocity) {
if (mAdapter == null || mAdapter.getCount() <= 0) {
setScrollingCacheEnabled(false);
return;
}
if (!always && mCurItem == item && mItems.size() != 0) {
setScrollingCacheEnabled(false);
return;
}
if (item < 0) {
item = 0;
} else if (item >= mAdapter.getCount()) {
item = mAdapter.getCount() - 1;
}
final int pageLimit = mOffscreenPageLimit;
if (item > (mCurItem + pageLimit) || item < (mCurItem - pageLimit)) {
// We are doing a jump by more than one page. To avoid
// glitches, we want to keep all current pages in the view
// until the scroll ends.
for (int i=0; i<mItems.size(); i++) {
mItems.get(i).scrolling = true;
}
}
final boolean dispatchSelected = mCurItem != item;
if (mFirstLayout) {
// We don't have any idea how big we are yet and shouldn't have any pages either.
// Just set things up and let the pending layout handle things.
mCurItem = item;
triggerOnPageChangeEvent(item);
requestLayout();
} else {
populate(item);
scrollToItem(item, smoothScroll, velocity, dispatchSelected);
}
}