<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.wofu.viewpager.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpage"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#66ff66"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignBottom="@+id/viewpage">
<TextView
android:id="@+id/imagedesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="广告条的效果"
android:gravity="center"/>
</LinearLayout>
<LinearLayout
android:id="@+id/pointGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
</RelativeLayout>
public class MainActivity extends AppCompatActivity {
private ViewPager viewpager;
private LinearLayout pointGroup;
private TextView imagedesc;
private final int[] imageIds = {R.drawable.ic_launcher_background, R.drawable.ic_launcher_background, R.drawable.ic_launcher_background, R.drawable.ic_launcher_background, R.drawable.ic_launcher_background};
private int lastposition;//上一个页面的位置
private ArrayList<ImageView> imageviewlist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewpager = findViewById(R.id.viewpage);
pointGroup = findViewById(R.id.pointGroup);
imagedesc = findViewById(R.id.imagedesc);
//初始化图片资源
for (int i = 0; i < imageIds.length; i++) {
ImageView image = new ImageView(this);
image.setBackgroundResource(imageIds[i]);//设置背景
imageviewlist.add(image);
//添加指示的点
ImageView point = new ImageView(this);
//给布局添加属性
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(5,5);
params.rightMargin=20;
point.setLayoutParams(params);
point.setBackgroundResource(R.drawable.point_bg);
if (i == 0) {
point.setEnabled(true);
} else {
point.setEnabled(false);
}
pointGroup.addView(point);//吧点添加到布局中
}
viewpager.setAdapter(new Myadapt());
viewpager.setCurrentItem(Integer.MAX_VALUE/2-(Integer.MAX_VALUE/2%imageviewlist.size()));
//viewpager的监听
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
//正在滑动的时候
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//页面切换后调用,position 是新的页面位置
@Override
public void onPageSelected(int position) {
position=position%imageviewlist.size();
imagedesc.setText(position + "");//设置描述的文字
//改变指示点的状态,吧当前的点的enable改为true
pointGroup.getChildAt(position).setEnabled(true);
//吧上一个点设置为true;
pointGroup.getChildAt(lastposition).setEnabled(false);
lastposition=position;
}
//状态改变时
@Override
public void onPageScrollStateChanged(int state) {
}
});
/*
* 自动循环
* 1.定时器Timer
* 2.开子线程while true循环
* 3.clockManafger
* 4.handler发送延时信息,实现循环
* */
isrunning=true;
handler.sendEmptyMessageDelayed(0,2000);//发送消息
}
private boolean isrunning=false;//判断是否自动滚动
private Handler handler=new Handler(){
//接收handler发送的message
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
viewpager.setCurrentItem(viewpager.getCurrentItem()+1);//让Viewpage滚动到下一页
if(isrunning) {
handler.sendEmptyMessageDelayed(0, 2000);//发送消息
}
}
};
private class Myadapt extends PagerAdapter {
//获取页面的总数
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
//判断View和eobject的对应关系
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
//添加container的内容
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(imageviewlist.get(position%imageviewlist.size()));
//返回和该View相关的object
return imageviewlist.get(position%imageviewlist.size());
}
//销毁对应位置上的object
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// super.destroyItem(container, position, object);
container.removeView((View) object);
object = null;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
isrunning=false;//销毁的时候就不要滚动了
}
}
-------在res/drawable中创建point_focus.xml自定义一个小点-----
<?xml version="1.0" encoding="utf-8"?> <!--小点,指示点--> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="5dp" android:height="5dp"/> <solid android:color="#55000000"/> </shape>------在res/drawable中创建point_normal.xml另一个状态小点---
<?xml version="1.0" encoding="utf-8"?> <!--小点,指示点--> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="5dp" android:height="5dp"/> <solid android:color="#aaFFFFFF"/> </shape>
---------在res/drawable中创建point_bg.xml各种状态的背景----
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/point_normal" android:state_enabled="false"/> <item android:drawable="@drawable/point_focus" android:state_enabled="true"/> </selector>