-----------------------------------------------案例效果-------------------------------------
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="200dip" />
<LinearLayout
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/viewPager"
android:background="#44000000"
android:orientation="vertical" >
<TextView
android:singleLine="true"
android:id="@+id/tv_msg"
android:textColor="#ffffff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="武媚娘传奇"
android:textSize="18sp" />
<LinearLayout
android:id="@+id/ll_point_group"
android:padding="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
</LinearLayout>
</RelativeLayout>drawable目录下有三个xml文件<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="false" android:drawable="@drawable/normal_point"></item>
<item android:state_enabled="true" android:drawable="@drawable/focused_point"></item>
</selector>normal_point.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<size android:width="10dip" android:height="10dip"/>
<solid android:color="#55000000"/>
</shape>focused_point.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<!-- 椭圆 -->
<size android:width="10dip" android:height="10dip"/>
<solid android:color="#66ffffff"/>
</shape>package com.atguigu.myviewpager;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
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 {
// viewPager继承viewGroup
private ViewPager viewPager;
private TextView tv_msg;
// 显示当前页的圆点标志布局视图
private LinearLayout ll_point_group;
/**
* 图片的int数组集合 图片标题集合 图片集合
*/
private int[] ids = { R.drawable.a, R.drawable.b, R.drawable.c,
R.drawable.d, R.drawable.e };
private final String[] imageDescriptions = { "巩俐不低俗,我就不能低俗",
"朴树又回来啦!再唱经典老歌引万人大合唱", "揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" };
private ArrayList<ImageView> imageViews;
// 上一次被高亮显示的位置
private int lastIndex = 0;
// 是否已经执行了Activity中的onDestroy true:执行 false:没有执行
private boolean isDestroy = false;;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取viewPager
viewPager = (ViewPager) findViewById(R.id.viewPager);
// 获取图片说明
tv_msg = (TextView) findViewById(R.id.tv_msg);
// 获取圆点线性布局
ll_point_group = (LinearLayout) findViewById(R.id.ll_point_group);
/**
* 准备需要的数据 1、初始化圆点集合数据 2、获取图片集合数据
*/
imageViews = new ArrayList<ImageView>();
for (int i = 0; i < ids.length; i++) {
// 1、实例化图片,并且设置背景
ImageView imageView = new ImageView(this);
imageView.setBackgroundResource(ids[i]);
// 把图片添加到集合中
imageViews.add(imageView);
// 2、设置圆点图片背景
ImageView iv_point = new ImageView(this);
iv_point.setBackgroundResource(R.drawable.point_bg);
// 导入的包应该是父类的参数
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
iv_point.setLayoutParams(params);
// 圆点之间有距离
params.leftMargin = 10;
// 默认第一个圆点是高亮显示(第一个图片被选中)
if (i == 0) {
iv_point.setEnabled(true);
} else {
iv_point.setEnabled(false);
}
ll_point_group.addView(iv_point);
}
/**
* 创建并且设置适配器
*/
MyPagerAdapter adapter = new MyPagerAdapter();
viewPager.setAdapter(adapter);
// ????
int item = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2
% imageViews.size();
// 22->11
Log.e("TAG",item+"-----" );
// 设置为中间????
viewPager.setCurrentItem(item);
// 设置默认文本信息
String msg = imageDescriptions[0];
tv_msg.setText(msg);
// 监听页面改变
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
/**
* 当选择某个页面的时候回调 position:把选择的位置传过来
*/
@Override
public void onPageSelected(int position) {
int myposition = position % imageViews.size();
// 根据位置取出对应的文本
String msg = imageDescriptions[myposition];
tv_msg.setText(msg);
ll_point_group.getChildAt(lastIndex).setEnabled(false);
ll_point_group.getChildAt(myposition).setEnabled(true);
lastIndex = myposition;
}
/**
* 当页面滑动了或者滚动了的时候,回调这个方法 position:页面的下标 positionOffset:滑动的页面比
* positionOffsetPixels:滑动了多少的像素
*/
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
/**
* 当页面滑动状态发送变化的时候回调这个方法
*/
@Override
public void onPageScrollStateChanged(int state) {
}
});
// 发消息开始自动切换图片
isDestroy = false;
// 一加载页面,就先发一个3秒延迟消息
handler.sendEmptyMessageDelayed(0, 3000);
}
/*
* handler
*/
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
// 切换到下一个页面
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
// 循环显示图片-不断切换
if (true) {
// 每隔4秒图片切换一下-自己本身处理消息
handler.sendEmptyMessageDelayed(0, 4000);
}
};
};
/**
* 退出应用
*/
@Override
protected void onDestroy() {
super.onDestroy();
isDestroy = true;
}
/**
* 适配器类
*/
class MyPagerAdapter extends PagerAdapter {
// 得到数据的总条数
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
// 相当于:getView(); container:就是一个容器,就是ViewPager
// position:位置下标
@Override
public Object instantiateItem(ViewGroup container, int position) {
// 根据位置得到具体的页面
Log.e("TAG",position+"" );
Log.e("TAG",position % imageViews.size()+"" );
ImageView imageView = imageViews.get(position % imageViews.size());
// 把图片添加到ViewPager里面
container.addView(imageView);
return imageView;
}
/**
* 比较view是否是由instantiateItem所实例化的 view 当前页面 object:instantiateItem方法返回的值
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
/**
* 根据位置移除对应的被销毁的控件
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
原文:http://blog.csdn.net/u013210620/article/details/44105803