viewPager本地图片自动轮播

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);
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值