图片自动轮转

首先定义两layout:

<?xml version="1.0" encoding="utf-8"?>
<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.administrator.myviewpager_1220.MainActivity">

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/viewpager"
        android:padding="10dp">

        <LinearLayout
            android:id="@+id/point"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:orientation="horizontal"></LinearLayout>
    </LinearLayout>
</RelativeLayout>
-------2-----------

然后写activity、adapter,model类

package com.example.administrator.myviewpager_1220;

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

import java.util.List;

/**
 * Created by Administrator on 2016/12/20.
 */
public class MyAdapter extends PagerAdapter{

    private Context context;
    private List<ImgModel> list;

    /**
     * 构造方法
     * @param context
     * @param list
     */
    public MyAdapter(Context context, List<ImgModel> list) {
        this.context = context;
        this.list = list;
    }

    /**
     * 获取总数目
     * @return
     */
    @Override
    public int getCount() {
        return Integer.MAX_VALUE;//2的31次方减1,默认为无限大
    }
    /**
     * 判断是否由对象生成页面
     * @param view:应该生成的页面
     * @param object:待检测的页面
     * @return
     */
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }
    /**
     * 添加页面
     * @param container:将要显示的页面
     * @param position:将要显示的页面对应的位置
     * @return
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        //添加子布局
        View v = View.inflate(context,R.layout.img_item,null);
        //声明控件并绑定id
        ImageView img = (ImageView) v.findViewById(R.id.img);
        //获取图片
        img.setBackgroundResource(list.get(position%list.size()).getImgid());
        //将图片子布局添加到视图
        container.addView(v);

        return v;
    }

    /**
     * 销毁页面
     * @param container:
     * @param position:将要销毁的页面对应的位置
     * @param object:instantiateItem方法返回的对象
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        //移除视图
        container.removeView((View) object);
    }
}
--------------------------

package com.example.administrator.myviewpager_1220;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {

    //声明控件
    private ViewPager viewPager;
    private LinearLayout point;
    //集合
    private List<ImgModel> list;
    //图片数组
    private int[] imgid = {R.mipmap.welcome, R.mipmap.welcome1, R.mipmap.welcome2, R.mipmap.welcome3};
    //适配器
    private MyAdapter adapter;

    //handler 机制处理定时任务
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
            handler.sendEmptyMessageDelayed(0, 500);//设置事件间隔
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定id
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        point = (LinearLayout) findViewById(R.id.point);
        //设置监听
        viewPager.setOnPageChangeListener(this);
        //初始化
        list = new ArrayList<ImgModel>();
        //遍历图片数组
        for (int i = 0; i < imgid.length; i++) {
            ImgModel adimg = new ImgModel();
            adimg.setImgid(imgid[i]);
            list.add(adimg);
        }
        //初始化小圆点,遍历集合
        for (int i = 0; i < list.size(); i++) {
            //新建视图
            View view = new View(this);
            //新建一个布局参数,设置小圆点:LayoutParams(小圆点的宽,小圆点的高);
            LayoutParams params = new LayoutParams(10, 10);
            //设置小圆点的间距
            if (i != 0) {//第一个小圆点不用设置间距,所以从第二个小圆点开始设置间距
                params.leftMargin = 10;
            }
            //设置小圆点视图
            view.setLayoutParams(params);
            //给小圆点设置背景颜色
            view.setBackgroundResource(R.drawable.points);
            //将设置好的小圆点添加到布局控件里
            point.addView(view);

        }

        //初始化适配器
        adapter = new MyAdapter(this, list);
        //设置适配器
        viewPager.setAdapter(adapter);

        //设置当前的图片位置
        //将有用的View放到所有的View的中间,并将有用的View的第一个视图放到第一张的位置
        viewPager.setCurrentItem(Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2) % list.size());
        changePoint();//动态改变小圆点
        //设置自动跳转时间为5秒
        handler.sendEmptyMessageDelayed(0, 500);

    }

    //动态改变小圆点
    private void changePoint() {
        //获取当前页面的位置
        int currentPager = viewPager.getCurrentItem() % list.size();
        //遍历圆点
        for (int i = 0; i < point.getChildCount(); i++) {
            //设置Enabled,获取小圆点的焦点,当i==currentPager,小圆点是白色
            point.getChildAt(i).setEnabled(i == currentPager);
        }
    }

    /**
     * 此方法在页面滑动结束调用
     *
     * @param position:选中页面的位置
     */
    @Override
    public void onPageSelected(int position) {
        changePoint();//动态改变小圆点
    }

    /**
     * 此方法在页面滑动的时候调用
     *
     * @param position:当前页面的位置
     * @param positionOffset:页面偏移的百分比
     * @param positionOffsetPixels:页面偏移的像素
     */
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }


    /**
     * 此方法在页面状态改变的时候调用
     *
     * @param state:state==0:什么也没做 state==1:正在滑动
     *                             state==2:滑动结束
     */
    @Override
    public void onPageScrollStateChanged(int state) {

    }
}

原文地址:https://www.cnblogs.com/ll-ouyang/p/6282110.html