ViewPager自动切换

本文详细介绍如何使用Android中的ViewPager和自定义PagerAdapter实现图片轮播效果。从布局文件配置到PagerAdapter继承实现,再到Activity中初始化ViewPager及设置监听器,最后通过ScheduledExecutorService定时切换页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在布局文件中创建ViewPager

 <android.support.v4.view.ViewPager
           android:id="@+id/vp"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent" />

2、自定ViewPagerAdapter继承PagerAdapter
public class ChoseViewPagerAdapter extends PagerAdapter{

private Context context;
private List<ImageView> images;
public ChoseViewPagerAdapter(Context context, List<ImageView> images) {
    super();
    this.context = context;
    this.images = images;
}

@Override
public int getCount() {

    return images.size();
}

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

    return arg0==arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView(images.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
    container.addView(images.get(position));
    return images.get(position);
}

}
3、在Activity中的代码
public class ChoseFragment extends Fragment {
private ChoseViewPagerAdapter adapter;
private int[] imageIds={R.drawable.read1,R.drawable.read2,R.drawable.read3,R.drawable.read4,R.drawable.read1};
private ArrayList images;
private int oldPosition = 0;//记录上一次点的位置
private int currentItem; //当前页面
private ScheduledExecutorService scheduledExecutorService;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.fragment_chose, container, false);

    initView(view);
    initViewPager(view);

    return view;
}


    private void initViewPager(View v) {
            images = new ArrayList<ImageView>();
              for(int i =0; i < imageIds.length; i++){
                  ImageView imageView = new ImageView(getActivity());
                  imageView.setBackgroundResource(imageIds[i]);
                  images.add(imageView);
              }
    mViewPager=(ChildViewPager) v.findViewById(R.id.vp_chose_fragment);
    adapter=new ChoseViewPagerAdapter(getActivity(), images);
    mViewPager.setAdapter(adapter);
    mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            tvTitle.setText(titles[position]);

            dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal);
            dots.get(position).setBackgroundResource(R.drawable.dot_focused);

            oldPosition = position;
            currentItem = position;
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {

        }
    });
}

@Override
public void onStart() {
super.onStart();

    scheduledExecutorService=Executors.newSingleThreadScheduledExecutor();
    //每隔4秒钟切换一张图片
    scheduledExecutorService.scheduleWithFixedDelay(new Runnable() {
        @Override
        public void run() {
             currentItem = (currentItem +1) % imageIds.length;
                          //更新界面
                         handler.obtainMessage().sendToTarget();
        }
    }, 4, 4, TimeUnit.SECONDS);
}
private Handler handler=new Handler(){
    //设置当前页面
    public void handleMessage(Message msg) {
        mViewPager.setCurrentItem(currentItem);
    };
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值