首先定义两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) {
}
}