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);
        }
    }