MainActivity:
package com.example.viewpagerdemo01;
import java.util.ArrayList;
import java.util.List;
import com.example.viewpagerdemo01.adapter.ViewPagerAdapter;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.RadioGroup;
/**
* viewPager控件的简单使用
*
* 以一页一页的形式去展示视图
*
* 1.使用这个控件的时候需要在布局文件xml中全类名引用
*
*
* android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"全屏使用的主题
*
* 至少sdk版本是13
*
* @author Administrator
*
*/
public class MainActivity extends Activity {
private ViewPager pager;
private RadioGroup group;
private Button button;
private List<Integer> list;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.what == 0) {
//接收到消息之后向下滑动一页
//获取当前页所在的位置
int currentItem = pager.getCurrentItem();
pager.setCurrentItem(currentItem+1);
//再次发送消息
handler.sendEmptyMessageDelayed(0, 1000);
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager = (ViewPager) findViewById(R.id.view_pager);
group = (RadioGroup) findViewById(R.id.group);
button = (Button) findViewById(R.id.button);
list = new ArrayList<Integer>();
list.add(R.drawable.a);
list.add(R.drawable.b);
list.add(R.drawable.c);
list.add(R.drawable.d);
list.add(R.drawable.e);
//viewpager要展示视图需要设置适配器
ViewPagerAdapter adapter = new ViewPagerAdapter(list,MainActivity.this,handler);
pager.setAdapter(adapter);
//进入页面,把pager给显示在中间的某个位置
pager.setCurrentItem(list.size()*100000);
//发送一个延时两秒的空消息
handler.sendEmptyMessageDelayed(0, 1000);
//给nviewPager设置监听
pager.setOnPageChangeListener(new OnPageChangeListener() {
//选中某一页的时候调用的方法
@Override
public void onPageSelected(int position) {
//group.getChildAt(position).getId();先拿到当前位置的孩子,在拿到孩子的id
//选中 当前页面的时候,,,把group里面的小圆点选中
group.check(group.getChildAt(position%list.size()).getId());
}
//页面滑动的时候调用的方法,,,positionOffset偏移量[0,1),,,positionOffsetPixels偏移的像素值[0,屏幕的宽度)
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
//页面滑动状态改变时
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
}
adapter:
package com.example.viewpagerdemo01.adapter;
import java.util.List;
import android.content.Context;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
/**
* 当前类继承的是PagerAdapter
*
*
* @author Administrator
*
*/
public class ViewPagerAdapter extends PagerAdapter{
List<Integer> list;
Context context;
Handler handler;
public ViewPagerAdapter(List<Integer> list, Context context, Handler handler) {
this.list = list;
this.context = context;
this.handler = handler;
}
/**
* 返回viewpager要展示的视图的数量
*/
@Override
public int getCount() {
// TODO Auto-generated method stub
return Integer.MAX_VALUE;
}
/**
* 当前页展示的视图是否跟object一致
* View view, 当前页面展示的视图
* Object object 是instantiateItem()方法返回的值
*/
@Override
public boolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
return view == object;
}
/**
* 1.实例化/返回当前页面展示的视图
* 2.并要把当前的视图添加到容器中container
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
//Log.i("instantiateItem", position+"----");
//当前页面要展示的是imageView
ImageView imageView = new ImageView(context);
imageView.setImageResource(list.get(position%list.size()));
imageView.setScaleType(ScaleType.FIT_XY);
//2.并要把当前的视图添加到容器中container
container.addView(imageView);
//给图片设置一个触摸事件,,,当按下或者移动图片的时候handler停止发消息,,,当取消或者抬起的时候handler继续发送消息
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {//event.getAction()手指的动作
case MotionEvent.ACTION_DOWN://按下
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_MOVE://移动
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_CANCEL://取消动作
handler.sendEmptyMessageDelayed(0, 1000);
break;
case MotionEvent.ACTION_UP://抬起
handler.sendEmptyMessageDelayed(0, 1000);
break;
default:
break;
}
//设置的触摸监听需要iamggeView来处理,,,而不是容器pager处理,,,所以返回true,,,表示自己处理
return true;
}
});
return imageView;
}
/**
* 销毁视图
*
* object就是instantiateItem()返回的值,,,,其实就是当前展示的视图
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//Log.i("destroyItem", position+"----");
// 在容器中把试图给移除
container.removeView((View) object);
}
}