三、Viewpager+无限轮播

1.布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:orientation="horizontal"
        android:gravity="center">

    </RadioGroup>

</LinearLayout>

2.主方法   MainActivity.java

package com.example.day9a_03_viewpager;

import java.util.ArrayList;

import com.example.day9a_03_viewpager.adapter.MypagerAdapter;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 1找控件
        final RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
        pager = (ViewPager) findViewById(R.id.pager);
        // 2数据
        int arr[] = { R.drawable.a1, R.drawable.a2, R.drawable.a3,
                R.drawable.a4 };

        final ArrayList<ImageView> list = new ArrayList<ImageView>();
        for (int i = 0; i < arr.length; i++) {
            ImageView imageView = new ImageView(MainActivity.this);
            // 设置图片
            imageView.setImageResource(arr[i]);
            // 加入集合
            list.add(imageView);
            // 11创建小圆点
            RadioButton button = new RadioButton(MainActivity.this);
            radioGroup.addView(button);
        }
        // 3适配器
        pager.setAdapter(new MypagerAdapter(list));
        // 设置小圆点
        // 12选中第一个
        radioGroup.check(radioGroup.getChildAt(0).getId());
        // 13页面滑动小圆点跟着走
        pager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                // 17求膜防止数据超过list.size()
                arg0 = arg0 % list.size();
                // 14页面切换切换的时候,也切换小圆点的选中
                radioGroup.check(radioGroup.getChildAt(arg0).getId());

            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // 页面滚动

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // 滚动状态改变

            }
        });
        // 15实现无限??
        // 进入适配器
        // 18实现自动轮播
        handler.sendEmptyMessageDelayed(0, 2000);
    }

    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case 0:
                //19切换界面
                //先知道当前展示的是第几个界面,然后得到界面的索引+1=下一个页面
                //获取当前展示的界面索引
                int currentItem = pager.getCurrentItem()+1;
                pager.setCurrentItem(currentItem);
                //20实现无限轮播
                handler.sendEmptyMessageDelayed(0, 2000);
                break;
 
            }
        };
    };
    private ViewPager pager;

}
3.适配器   MypagerAdapter

package com.example.day9a_03_viewpager.adapter;

import java.util.ArrayList;

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

//4继承PagerAdapter
public class MypagerAdapter extends PagerAdapter {
    //5 数据属性
    ArrayList<ImageView> list;
    //6有参构造
    public MypagerAdapter(ArrayList<ImageView> list) {
        this.list = list;
    }

    @Override
    public int getCount() {
        // 7设置页面个数
//        return list.size();
        //15给适配器返回一个无限大得值
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
         //8返回
        return arg0==arg1;
    }
    //9调用初始条目的方法
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
//        5 %4=1
//        20%4=0
        //16求膜防止数据超过list.size()
        position=position%list.size();
        
         ImageView imageView = list.get(position);
         //把imageview 加到viewpager中
         container.addView(imageView);
         //最后要返回
         return imageView;
         
    }
    //10销毁条目
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object );
    }
    

}
 

猜你喜欢

转载自blog.csdn.net/qq_42436644/article/details/85106018