ViewPager无限自动轮播

布局中的实现代码

<RelativeLayout 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"
    tools:context="com.example.radiobutto.MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    </android.support.v4.view.ViewPager>
     <LinearLayout 
        android:id="@+id/ll_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="500dp"
        android:layout_centerHorizontal="true"
        android:orientation="horizontal">
    </LinearLayout>
</RelativeLayout>

//主类中的实现代码

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.LinearLayout.LayoutParams;

public class MainActivity extends Activity{
    private ViewPager viewpager;
    private LinearLayout line;
    private int image[]=new int[]{R.drawable.aaa,R.drawable.bbb,R.drawable.ccc};
    private List<View> list;
     // 上一个指示点的下标
        private  int lastPointIndex=0;
        //这个是实现自动轮播的功能 定义一个线程 发送一个请求
        Handler handler=new Handler(){
            public void handleMessage(android.os.Message msg) {
                //获得当前页面的current号
                int currentItem = viewpager.getCurrentItem();
                viewpager.setCurrentItem(currentItem+=1);
                handler.sendEmptyMessageDelayed(1, 2000);//需要有延迟 就是每三秒就换一张页面
            };
        };
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById();
        //初始化数据
        initData();
        //为ViewPager添加适配器
        setvpAdapter();
        viewpager.setCurrentItem(Integer.MAX_VALUE/2);
        handler.sendEmptyMessageDelayed(1, 2000);
        setShapePoint();


    }

    private void setShapePoint() {
         for (int i = 0; i <image.length; i++) {
                // 创建指示点 
                RadioButton radio = new RadioButton(MainActivity.this);
                // 设置指示点的背景
                radio.setBackgroundResource(R.drawable.select);
                // 得到布局设置参数的对象,该对象的类型取决于当前view的父view
                LayoutParams layoutParams = new LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                // 设置指示点的间距,当前设置的是到左边控件的距离
                layoutParams.leftMargin = 15;
                // 给指示点设置参数
                radio.setLayoutParams(layoutParams);
                // 把imageView装进linearLayout布局中
                line.addView(radio);
                // 设置指示点的初始状态,当指示点是第一个的时候,设置成选中状态,其余的都是不选中
                if (i == 0) {
                    radio.setEnabled(true);
                } else {
                    radio.setEnabled(false);
                }
            }
            viewpager.setOnPageChangeListener(new OnPageChangeListener() {

                @Override
                public void onPageSelected(int arg0) {
                    int index = arg0 % image.length;
                    // 通过角标,得到linearLayout的子控件,设置当前指示点的选择状态
                    line.getChildAt(index).setEnabled(true);
                    // 设置上一个指示点的选择状态
                    line.getChildAt(lastPointIndex).setEnabled(false);
                    // 记录上一个角标位置
                    lastPointIndex = index;
                }

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

                }

                @Override
                public void onPageScrollStateChanged(int arg0) {

                }
            });     
    }

    private void setvpAdapter() {

        viewpager.setAdapter(new PagerAdapter() {

            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                return arg0 == arg1;
            }
            @Override
            public int getCount() {
                return Integer.MAX_VALUE;//无限轮播
            }
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                if (list.get(position%image.length).getParent()!=null) {
                    container.removeView(list.get(position%image.length));
                }
                container.addView(list.get(position%image.length));
                return list.get(position%image.length);
            }
            @Override
            public void destroyItem(ViewGroup container, int position,
                    Object object) {
            } 
        });
    }

    private void initData() {
        list = new ArrayList<View>();
        for (int i = 0; i < image.length; i++) {
            ImageView imageView = new ImageView(MainActivity.this);
            imageView.setImageResource(image[i]);
            list.add(imageView);
        }
    }

    private void findViewById() {
        // 获得控件的id
        viewpager = (ViewPager) findViewById(R.id.viewpager);
        line = (LinearLayout) findViewById(R.id.ll_layout);
    }
}

我们需要在res目录下创建一个名为drawable的文件夹
select.xml中的实现代码这个是选择图片的

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_enabled="true" android:drawable="@drawable/true_123"></item>
<item android:state_enabled="false" android:drawable="@drawable/false_"></item>

</selector>

true_123.xml中的实现代码 选中状态下RadioButton的宽高和颜色

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <size android:width="10dp" android:height="10dp"/>
    <solid android:color="#000000"/>
</shape>

false_.xml中的实现代码 选中状态下RadioButton的宽高和颜色

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <size android:width="10dp" android:height="10dp"/>
    <solid android:color="#808080"/>
</shape>

运行的效果展示:可以实现无限自动轮播

你可能感兴趣的:(ViewPager无限自动轮播)