2

我希望我的 ViewPager 实现在视图之间循环,而不是在最后一个视图处停止。例如,如果我有 3 个视图要通过 ViewPager 显示,它应该在第三个视图之后返回到第一个视图,而不是在第三个视图处停止。我希望它在用户在最后一页向前翻页时返回到第一页/视图

非常感谢,

我的页面适配器;

package com.example.pictures;

import android.content.Context;
import android.media.AudioManager;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;


public class MyPagerAdapter extends  PagerAdapter{

public int getCount() {
    return 6;
}

public Object instantiateItem(View collection, int position) {

    View view=null;

    LayoutInflater inflater = (LayoutInflater) collection.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    int resId = 0;
    switch (position) {
    case 0:
        resId = R.layout.picture1;
        view = inflater.inflate(resId, null);         
        break;
    case 1:
        resId = R.layout.picture2;   
        view = inflater.inflate(resId, null);
        break;
    case 2:
        resId = R.layout.picture3;
        view = inflater.inflate(resId, null);
        break;
    case 3:
        resId = R.layout.picture4;
        view = inflater.inflate(resId, null);
        break;
    case 4:
        resId = R.layout.picture5;
        view = inflater.inflate(resId, null);   
        break;
    case 5:
        resId = R.layout.picture6;
        view = inflater.inflate(resId, null);
        break;
    }

    ((ViewPager) collection).addView(view, 0);

    return view;
}

@SuppressWarnings("unused")
private Context getApplicationContext() {
    // TODO Auto-generated method stub
    return null;
}


private void setVolumeControlStream(int streamMusic) {
    // TODO Auto-generated method stub

}


@SuppressWarnings("unused")
private Context getBaseContext() {
    // TODO Auto-generated method stub
    return null;
}


@SuppressWarnings("unused")
private PagerAdapter findViewById(int myfivepanelpager) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
    ((ViewPager) arg0).removeView((View) arg2);
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == ((View) arg1);

}

@Override
public Parcelable saveState() {
    return null;
}

public static Integer getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

}

OnPageChangeListener;

package com.example.pictures;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;


public class Pictures extends Activity implements OnPageChangeListener{
SoundManager snd; 
int sound1,sound2,sound3;
View view=null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.picturespage);

 MyPagerAdapter adapter = new MyPagerAdapter();
 ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
 myPager.setAdapter(adapter);
 myPager.setCurrentItem(0); 
 myPager.setOnPageChangeListener(this);
snd = new SoundManager(this);
 sound1 = snd.load(R.raw.sound1);
 sound2 = snd.load(R.raw.sound2);
 sound3 = snd.load(R.raw.sound3);

}
public void onPageScrollStateChanged(int arg0) {
    // TODO Auto-generated method stub

}

public void onPageScrolled(int arg0, float arg1, int arg2) {
    // TODO Auto-generated method stub

}

public void onPageSelected(int position) {
    // TODO Auto-generated method stub

    switch (position) {
    case 0:
            snd.play(sound1);
        break;
    case 1:
        snd.play(sound2);
        break;
    case 2:
            snd.play(sound3);
        break;
    case 3:
      Toast.makeText(this, "1", Toast.LENGTH_SHORT).show();
        break;
    case 4:
       Toast.makeText(this, "2", Toast.LENGTH_SHORT).show();
        break;
    case 5:
        Toast.makeText(this, "3", Toast.LENGTH_SHORT).show();
        break;
    }
}
};
4

3 回答 3

0

这里有一个建议,你有没有试过使用 FragmentStatePagerAdapter 或 FragmentPagerAdapter,而不是普通的 PagerAdapter?

它的作用是加载要在 ViewPager 中滑动的片段,它在通过扩展片段的类运行应用程序时创建片段。

我建议使用片段,因为您可以在加载视图页面/片段时以编程方式执行其他逻辑 - 例如 --> if (page == lastpage) then current page is this。

Viewpager 有这个功能

  ViewPager yourViewPager.setCurrentItem(0);

我认为这通常是你想要的,所以当你的viewpager首先或最后一个基本位置时添加这个逻辑

C-A-B-C-A

'A' 会一直有 C 和 B 在他旁边,你可以将当前项目设置为 (1);
'B' 将在他旁边有 A 和 C,并将当前项目设置为 (2);
等等等等....

使用它

mViewPager.setOnPageChangeListener
于 2012-11-19T01:51:34.937 回答
0

与@brian tang 的想法相同。我已经制定了自己的解决方案。我创建了一个ViewPager,它支持无限循环效果,智能自动滚动,兼容任何指标,使用方便。它特别将其用作带有简单项目页面的应用程序横幅。

它可以:

即插即用,简单易用

  • 无限循环项目
  • 自动滚动项目,允许配置,活动/片段恢复/暂停时自动恢复/暂停
  • 如果只有 1 个项目,则不会滚动或循环
  • 兼容多种指标

https://github.com/kenilt/LoopingViewPager

于 2020-03-15T13:55:48.610 回答
0
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
    @Override
    public void onPageSelected(int arg0) {

    }
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        if(arg0 == 0 && (arg1 <= 0.001f && arg1 >= -0.001f)){
            mVp.setCurrentItem(list.size()-2, false);
        }else if(arg0 == list.size() - 1){
            mVp.setCurrentItem(1, false);
        }
    }
    @Override
    public void onPageScrollStateChanged(int arg0) {

    }
});
于 2016-08-14T08:02:10.030 回答