在程序drawable下:
---- point_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/point_enable" android:state_enabled="true"></item>
<item android:drawable="@drawable/point_normal" android:state_enabled="false"></item>
</selector>
======================绘制图形
point_enable.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<corners android:radius="5dip"/>
<solid android:color="#aaFFFFFF"/>
</shape>
====================绘制圆点
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<corners android:radius="5dip"/>
<solid android:color="#55000000"/>
</shape>
package com.example.viewpage;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
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.LinearLayout.LayoutParams;
import android.widget.TextView;
public class MainActivity extends Activity implements OnPageChangeListener{
private List<ImageView> listImageViews;
private String[] imageDescrptions;
private LinearLayout llPoints;
private TextView tvTitle;
private ViewPager mViewPager;
private int previousPostion=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
mViewPager = (ViewPager) findViewById(R.id.viewpager);
llPoints = (LinearLayout) findViewById(R.id.ll_points);
tvTitle = (TextView) findViewById(R.id.tv_title);
listImageViews = new ArrayList<ImageView>();
//初始化图片的ID,图片的文本
int[] imageResIDs=getImageResIDs();
imageDescrptions=getImageDescriptions();
ImageView mImageView;
View view;
LayoutParams lp;
for (int i = 0; i < imageResIDs.length; i++) {
mImageView = new ImageView(this);
mImageView.setImageResource(imageResIDs[i]);
listImageViews.add(mImageView);
//每次循环一次添加一个点
view=new View(this);
view.setBackgroundResource(R.drawable.point_background);
lp= new LayoutParams(5,5);
lp.leftMargin = 5 ;
view.setLayoutParams(lp);
view.setEnabled(false);
llPoints.addView(view);
}
mViewPager.setAdapter(new ViewPagerAdatper());
int item=Integer.MAX_VALUE/2;
mViewPager.setCurrentItem(item);
mViewPager.setOnPageChangeListener(this);
llPoints.getChildAt(0).setEnabled(true);
tvTitle.setText(imageDescrptions[0]);
previousPostion = item % listImageViews.size();
}
/**
* 封装图片id
*/
public int[] getImageResIDs(){
return new int[]{
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e
};
}
public String [] getImageDescriptions(){
return new String[]{
"1111111111111111111",
"2222222222222222222",
"3333333333333333333"
};
}
/**
*ViewPagerAdapter
*
*/
public class ViewPagerAdatper extends PagerAdapter{
/**
* viewpager的长度
*/
@Override
public int getCount() {
// return listImageViews.size();
return Integer.MAX_VALUE;
}
/**
* 判断滑动的控件和将要显示的控件是否为同一个
* true 直接复用
* false 会调用instantiateItem 得到一个新的对象
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
/**
* 移除ImageView对象
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// container.removeView(listImageViews.get(position));
mViewPager.removeView(listImageViews.get(position % listImageViews.size()));
}
/**
* 得到一个Object对象就是ImageView
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
// container.addView(listImageViews.get(position));
// return listImageViews.get(position);
// 需要把imageView加到ViewPager中, 把imageView对象返回给上一层
mViewPager.addView(listImageViews.get(position % listImageViews.size()));
return listImageViews.get(position % listImageViews.size());
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
/**
* 将要出来的item的索引是-1 或者 大于等于 viewpage.getCount()
* 不会切换item
*/
@Override
public void onPageSelected(int position) {
int realPosition = position % listImageViews.size();
if(imageDescrptions.length>realPosition){
// 切换文本显示的内容
tvTitle.setText(imageDescrptions[realPosition]);
}
// 切换点的状态
llPoints.getChildAt(realPosition).setEnabled(true);
// 把前一个的点置为false
llPoints.getChildAt(previousPostion).setEnabled(false);
previousPostion = realPosition;
}
}
效果图: