在程序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;
}
}
效果圖: